其實 Android 有內建 HttpClient 的 library,但是實在是太舊了(4.0beta2),所以用了熱心人士重新包裝過後的 新版,雖然有點大,不過把常用的都包進去了,應該不會踩到一些陳年老 bug。
下面的 code 還有用到 Apache Commons IO,這裡 可以下載。
private void postData(String url, String filepath, String filename ) throws Exception { byte[] data; HttpPost httppost = new HttpPost(url); HttpClient httpclient = HttpClientBuilder.create().build(); MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); InputStream inputStream = new FileInputStream(filepath); data = IOUtils.toByteArray(inputStream); InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), filename); //entityBuilder.addTextBody("action", "test"); //entityBuilder.addBinaryBody("file", file); entityBuilder.addPart("file", inputStreamBody); HttpEntity entity = entityBuilder.build(); httppost.setEntity(entity); HttpResponse response = httpclient.execute(httppost); HttpEntity httpEntity = response.getEntity(); String result = EntityUtils.toString(httpEntity); Log.d("uploader", result); }
DefaultHttpClient
已經過時了,不建議使用,所以用 HttpClientBuilder
代替。
你的这篇文章解决了我的大问题,非常感谢!其他资料都是 new FileBody(),这样会在本地服务器产生垃圾文件。