Android アプリの一部として、ビットマップをアップロードしてリモートに保存したいと考えています。単純な HTTP GET および POST 通信は完全に機能していますが、マルチパート POST の実行方法に関するドキュメントはユニコーンと同じくらい珍しいようです。
さらに、ファイルを操作するのではなく、メモリから直接画像を送信したいと思います。以下のコード例では、後で HttpClient と MultipartEntity で使用するためにファイルからバイト配列を取得しています。
File input = new File("climb.jpg");
byte[] data = new byte[(int)input.length()];
FileInputStream fis = new FileInputStream(input);
fis.read(data);
ByteArrayPartSource baps = new ByteArrayPartSource(input.getName(), data);
これは、この ByteArrayPartSource をどこで取得するかを一生見つけることができないことを除いて、私にはかなり明確に思えます。httpclient および httpmime JAR ファイルにリンクしましたが、サイコロはありません。HttpClient 3.x と 4.x でパッケージ構造が大きく変わったと聞いています。
AndroidでこのByteArrayPartSourceを使用している人はいますか?どのようにインポートしましたか?
ドキュメントを掘り下げ、インターネットを精査した後、自分のニーズに合ったものを思いつきました。フォーム POST などのマルチパート リクエストを作成するには、次のコードでうまくいきました。
File input = new File("climb.jpg");
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://localhost:3000/routes");
MultipartEntity multi = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
String line;
multi.addPart("name", new StringBody("test"));
multi.addPart("grade", new StringBody("test"));
multi.addPart("quality", new StringBody("test"));
multi.addPart("latitude", new StringBody("40.74"));
multi.addPart("longitude", new StringBody("40.74"));
multi.addPart("photo", new FileBody(input));
post.setEntity(multi);
HttpResponse resp = client.execute(post);
HTTPMultipartMode.BROWSER_COMPATIBLE ビットは非常に重要です。これに関するRadomir のブログに感謝します。