【问题标题】:Alternative way to grab progress on multipart/form upload (Android)获取多部分/表单上传进度的替代方法(Android)
【发布时间】:2011-03-15 20:10:03
【问题描述】:

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

由于很早就从 SDK 中删除了 Apache HttpClient 3.1,并且现在作为 SDK 一部分的新 HttpClient 并未完全采用(它缺少多部分功能),您可以添加缺少的部分(特别是 apache-mime4j -0.6.jar 和 httpmime-4.0.1.jar)执行多部分/表单数据上传并获取上传进度(也在上述答案中描述)。

现在,我提出一个新问题的原因是,按照描述的操作会导致安装的应用程序大小大幅增长(在我的例子中从 170kb 增加到 732kb)。

所以,问题是:有没有其他方法可以在不增加应用大小的情况下执行多部分/表单数据上传并获取上传进度? 是否有任何其他库可以使用,或者是否有其他替代方法,此处未提及?

【问题讨论】:

    标签: java android upload progress multipartform-data


    【解决方案1】:

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

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

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

    这个解决方案有一些缺点。我现在能想到的是这样的:

    • 实现起来很复杂(单独的线程、附加的 HTTP 连接、..)
    • 您还需要控制服务器端并在那里进行更改。
    • 您在上传期间创建了额外的互联网流量,这可能会减慢您的上传速度并消耗更多的用户免费兆字节。

    【讨论】:

    • 不幸的是,我无法以任何方式控制服务器端。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2017-12-14
      • 2018-03-07
      • 1970-01-01
      • 2011-03-13
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多