【问题标题】:How can i detect if i have already downloaded the most recent files on android app?如何检测我是否已经在 android 应用上下载了最新的文件?
【发布时间】:2014-02-12 20:16:08
【问题描述】:

我正在尝试制作一个应用程序,它使用一堆文本文件作为其大部分操作的基础,并且可以从网络服务器更新这些文本文件。
目前,我的应用程序能够通过压缩存档下载一批文本文件,但我想知道是否有办法在下载之前检查我是否已经拥有 zip 文件的内容。
我现在要做的是下载并解压缩,然后逐行检查当前文件是否与最近下载的文件不同。
这似乎非常低效,但我不知道还有其他方法。
如果有人有任何建议,可以举一个小例子或给我指一个例子,我将不胜感激。

【问题讨论】:

  • 您可以将上次下载文件的时间存储在 SharedPreferences 上,然后在您的 Web 服务上进行回调以返回您需要下载的文件上次更改的时间,您是否可以控制网络服务?
  • 如果您可以在服务器上编辑文件,请添加一个计算 zip 文件哈希值的文件:这样您可以将服务器哈希值与您已有的 zip 文件的哈希值进行比较。如果两者相等,那么你的 zip 是最新的,如果不是,你需要重新下载文件
  • http 包含了一个机制。使用 if-modified-since 并检查 304 响应。
  • 您也可以执行@BackSlash 之类的操作,但如果您只能存储哈希并调用以在您的网络服务上返回此哈希,则效果会更好,因此您无需执行下载只是为了检查文件
  • @GhostDerfel 这正是我要说的

标签: java android file download updates


【解决方案1】:

将 BackSlash 和其他人在 cmets 中已经说过的内容组装起来:

一种可能的解决方案是:

  1. Create a hash of the file 创建文件时(好)或 下载后(坏)
  2. 将此哈希存储在某处(例如,在文件名中instructions-d41d8cd98f00b204e9800998ecf8427e.zip
  3. 客户端:用字符串查询服务器
  4. 服务器:根据最新版本的哈希检查传输的哈希
  5. 服务器:做出相应响应(例如 通过使用 HTTP 内置 304 响应)
  6. 客户端:根据服务器的响应采取行动

【讨论】:

  • 我无法创建或修改服务器上已有的文件,只能下载它们。是否可以通过一些我不知道的 android 魔术来请求 zip 文件的文件大小?
  • 一般来说文件大小是不唯一的,但是如果你还想用的话可以检查http服务器是否在header中发送文件大小:stackoverflow.com/a/2983420/441907
  • 您还可以计算哈希客户端并将其发送到服务器(您需要对其进行调整以支持您的查询)。然后,您应该将哈希存储在某处,这样您就不需要重新计算它。下载后创建。
  • 如果我可以在实际下载文件之前计算 android 设备上的哈希值,那么这可能会解决我的问题。我可以简单地将校验和存储在设备上,并将校验和的历史记录与下载前服务器上的内容进行比较。
猜你喜欢
  • 1970-01-01
  • 2015-01-14
  • 2011-09-20
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多