短版-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将文件上传为“binary/octet-stream”;不是“多部分/表单数据”。我需要真实的领域。
这个例子,用 Java 上传文件(带进度条),展示了如何覆盖*Entity
或*Stream
. 所以也许我可以告诉一个被覆盖的实体来衡量它的上传进度MultipartEntityBuilder
?.create()
因此,如果我想覆盖某些东西,并将内置流替换为每 1000 个字节发送一个信号的计数流,也许我可以扩展该FileBody
部分,并覆盖它的getInputStream
and/or writeTo
。
但是当我尝试时class ProgressiveFileBody extends FileBody {...}
,我得到了臭名昭著的java.lang.NoClassDefFoundError
。
因此,当我在我的.jar
文件中探索,寻找丢失的 Def 时,有人可以检查我的数学,并指出一个我忽略的更简单的修复吗?