获取多部分/表单上传进度的替代方法(Android)

时间:2010-07-14 12:41:14

标签: java android upload progress multipartform-data

如本answer所述,您无法仅使用Android SDK获取Android中多部分/表单POST上传的进度,因为使用HttpURLConnection时流缓冲存在问题,将在Froyo后修复(见http://code.google.com/p/android/issues/detail?id=3164#c6)。

由于很早就从SDK中删除了Apache HttpClient 3.1而且现在已经完全采用了新的HttpClient(它现在是SDK的一部分)(它错过了多部分功能),你可以添加缺少的部分(特别是apache-mime4j) -0.6.jar和httpmime-4.0.1.jar)执行multipart / form-data上传并获取上传进度(也在上面提到的答案中描述)。

现在,我打开一个新问题的原因是,按照描述进行操作会导致已安装的应用程序大小(在我的情况下从170kb到732kb)大幅增长。

所以,问题是:还有其他方法可以执行多部分/表单数据上传并获取上传进度而不会增加应用程序的大小吗? 是否有其他可以使用的库或者是否有其他替代方法,这里没有提到?

2 个答案:

答案 0 :(得分:0)

一种完全替代的方式。如果您的上传需要很长时间,这可能是值得的,因为它会有一定的延迟,您不能更频繁地更新进度超过每秒1次。

无论如何,这是我的想法:您可以跟踪服务器端的上传进度(例如using PHP and APC)。

在android中,您可以启动一个单独的设备,该设备经常通过HTTP轮询上传状态并更新UI。

此解决方案存在一些缺点。这就是我现在能想到的:

  • 要实现的复杂(单独的线程,附加的HTTP连接,..)
  • 您还需要控制服务器端并在那里进行更改。
  • 您在上传过程中会产生额外的互联网流量,这可能会降低您的上传速度并消耗更多用户的免费兆字节。

答案 1 :(得分:0)

Apache HttpEntity接口在概念上非常简单 - 它只是一个能够将自己写入输出流并知道自己的MIME类型的对象。多部分表单MIME类型也很简单。因此,编写一个没有重要外部依赖关系的替换MultiPartEntity实现似乎很简单,因此不会显着扩大您的应用程序。