在进行 Android 开发时,通常会使用 HttpURLConnection 来上传文件。然而,如果需要上传较大的文件,则不建议使用 HttpURLConnection。如果在使用 HttpURLConnection 时编写程序不当,可能会导致令人沮丧的 OOM 问题。在 Android 开发中,如果需要上传较大的文件,建议使用 Apache HttpComponents 的 HttpClient 组件来处理文件上传。同时,该组件还有专门针对 Android 的版本(HttpClient for Android)。具体用法如下:
-
下载并导入 HttpClient 组件。可以只下载 httpmime-4.1.1.jar,或直接下载 Android HttpClient 版的源代码。
-
编写一个简单的上传代码,供参考:
String filePath = ""; //设置文件路径
String fileParam = ""; //文件的请求参数
HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
client.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "utf-8");
try {
MultipartEntity entity = new MultipartEntity();
File file = new File(filePath);
ContentBody fileBody = new FileBody(file); // 文件
entity.addPart(fileParam, fileBody);
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) { // 成功
//HttpEntity responseEntity = response.getEntity();
Log.i("TAG", "上传成功");
} else {
Log.i("TAG", "上传失败");
}
} catch (Exception e) {
Log.e("TAG", "异常");
}
最后附上 Apache HttpComponents 的下载地址:http://hc.apache.org/downloads.cgi