banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

[Android]解决HttpURLConnection上传大文件时出现OOM问题

在进行 Android 开发时,通常会使用 HttpURLConnection 来上传文件。然而,如果需要上传较大的文件,则不建议使用 HttpURLConnection。如果在使用 HttpURLConnection 时编写程序不当,可能会导致令人沮丧的 OOM 问题。在 Android 开发中,如果需要上传较大的文件,建议使用 Apache HttpComponents 的 HttpClient 组件来处理文件上传。同时,该组件还有专门针对 Android 的版本(HttpClient for Android)。具体用法如下:

  1. 下载并导入 HttpClient 组件。可以只下载 httpmime-4.1.1.jar,或直接下载 Android HttpClient 版的源代码。

  2. 编写一个简单的上传代码,供参考:

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。