banner
李大仁博客

李大仁博客

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

[Android] HttpURLConnectionを使用して大きなファイルをアップロードする際のOOM問題の解決

Android 開発では、通常、ファイルのアップロードに HttpURLConnection を使用しますが、大容量のファイルをアップロードする場合はお勧めしません。HttpURLConnection を不適切に使用すると、アップロード時に OOM 問題が発生し、開発者を困惑させる可能性があります。大容量のファイルをアップロードする場合は、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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。