短いバージョンの-org.apache...MultipartEntity
は非推奨であり、そのアップグレードであるMultipartEntityBuilder
は、オンライン フォーラムであまり紹介されていないようです。それを修正しましょう。私の(Android)アプリがファイルをアップロードするときに進行状況バーを表示できるように、コールバックを登録するにはどうすればよいですか?
長いバージョン-これは、「欠落している汚れの単純な例」ですMultipartEntityBuilder
:
public static void postFile(String fileName) throws Exception {
// Based on: https://stackoverflow.com/questions/2017414/post-multipart-request-with-android-sdk
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(SERVER + "uploadFile");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("file", new FileBody(new File(fileName)));
builder.addTextBody("userName", userName);
builder.addTextBody("password", password);
builder.addTextBody("macAddress", macAddress);
post.setEntity(builder.build());
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
// response.getStatusLine(); // CONSIDER Detect server complaints
entity.consumeContent();
client.getConnectionManager().shutdown();
} // FIXME Hook up a progress bar!
それを修正する必要がありますFIXME
。(追加の利点は、中断可能なアップロードです。)しかし(間違っているかどうかを修正してください)、すべてのオンライン例は不十分なようです。
たとえば、これhttp://pastebin.com/M0uNZ6SBは、ファイルを「バイナリ/オクテットストリーム」としてアップロードします。「マルチパート/フォームデータ」ではありません。実際のフィールドが必要です。
この例のJava を使用したファイルのアップロード (プログレス バー付き)*Entity
は、またはをオーバーライドする方法を示しています*Stream
。それで、アップロードの進行状況を測定するオーバーライドされたエンティティMultipartEntityBuilder
に伝えることができるでしょうか?.create()
したがって、何かをオーバーライドして、組み込みストリームを 1000 バイトごとにシグナルを送信するカウント ストリームに置き換えたい場合は、その部分を拡張して、そのand/orFileBody
をオーバーライドすることができます。getInputStream
writeTo
しかし、私が試してみるとclass ProgressiveFileBody extends FileBody {...}
、悪名高いjava.lang.NoClassDefFoundError
.
それで、私が自分の.jar
ファイルを調べて、行方不明の Def を探している間に、誰かが私の数学をチェックして、私が見落としていたより簡単な修正を指摘してくれませんか?