【问题标题】:Android: Download File only if changedAndroid:仅在更改时下载文件
【发布时间】:2011-03-22 18:08:46
【问题描述】:

我想编写一个需要来自网络的数据的 android 应用程序。此信息存储在 json 文件中。 json 文件中的数据保存在设备上。为了使其保持最新状态,我需要每小时检查一次文件中的更改。

由于远程文件可能会变得非常大,我只想在它与之前下载的版本不同时才下载它。我考虑过为此使用 HTTP 的 Last-Modified-Header。

我想出了以下工作流程(伪代码):

  • data = null; data_timestamp = null;
  • 每小时重复一次:
    • Last-Modified Header 向URL 和选项new_timestamp 发出HTTP Head-Request。
    • 如果是data==nullnew_timestamp > data_timestamp,那么
      • 向 URL 发出正常的 HTTP 请求
      • 保存到data并设置data_timestamp = new_timestamp

您认为这是一个合理的方法吗?我可以使用if-modified-since HTTP 标头来获取数据,前提是它自上次下载以来发生了变化。这将为我节省一个请求。如果已更改,则提供包含新数据的正文,如果未更改,则正文为空。

我还考虑过使用 ETags,因为如果文件有新内容(而不是修改日期已更改),我通常想下载,但我的网络服务器 (nginx) 不支持创建 etags,我出于性能原因,不想在服务器端涉及另一层。

【问题讨论】:

    标签: android http


    【解决方案1】:

    您应该考虑使用ETags 而不是依赖HTTP HEAD。他们是supported in javax.ws.rs.core with the EntityTag class

    您也可以查看Java-based example using Spring 来帮助解释一些概念。

    【讨论】:

    • 我已经看过 ETags,但我的网络服务器 (ngnix) 目前不支持开箱即用。不过谢谢你的提示。
    【解决方案2】:

    我解决了我上面描述的问题:使用if-modified-since HTTP Header 下载文件。 ngnix 网络服务器可以配置为返回有关此标头的正确信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2018-02-27
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多