如何避免偶尔损坏的下载

Posted

技术标签:

【中文标题】如何避免偶尔损坏的下载【英文标题】:How to avoid occasional corrupted downloads 【发布时间】:2010-07-08 23:08:45 【问题描述】:

我的网站有一个用户需要下载的 msi 文件。该文件没有什么特别之处。它位于网络服务器上的一个目录中,有一个常规的 HREF 指向它,用户可以点击它。有时用户会抱怨他们无法打开 msi 文件,因为 Windows Installer 声称该文件已损坏。重新下载文件没有帮助。我最终将文件作为通常有效的附件通过电子邮件发送。

我的猜测是该文件在用户的浏览器缓存中已损坏,或者可能是用户通过的中间代理缓存。

为什么会这样?是否有一种技术/最佳实践可以最大限度地减少损坏的可能性,或者如果在下载过程中确实损坏了文件,也许可以确保用户获得文件的新副本?

【问题讨论】:

【参考方案1】:

好吧,如果原因真的只是缓存,那么我认为您可以在让他们再次下载之前重命名文件。这也适用于任何代理。

编辑:另外,我相信大多数浏览器不会缓存页面,除非 Get 和 Post 参数保持不变。相同的可能通常适用于任何 URL。尝试在每次下载的 URL 末尾添加一个唯一的 get(或 post)参数。您可以使用当前时间或随机数等。您可以使用一个按钮,而不是超链接,单击该按钮时,会向下载 URL 提交带有唯一参数的表单。

【讨论】:

这需要我手动更改名称或有两个指向文件的链接,我不想这样做(尽管看起来我可能别无选择)。我注意到有些网站要求您在下载开始之前将一些数据发布到服务器。例如,大多数 Microsoft 下载要求您单击“提交”类型的按钮来开始下载。知道这是为什么吗? 我没有测试过你的理论,但我认为你可能是对的。 只是想在这里发布我的最终解决方案,它完全解决了我的问题。我将所有下载切换到 https。我的猜测是这行得通,因为中间服务器无法缓存安全内容。不是人人都能解决的,占用cpu资源多一点,但和我每周节省的支持时间相比,这算不了什么。【参考方案2】:

我的建议是:

    建议用户避免使用 IE(尤其是旧版本),因为下载被截断、缓存污染...... 建议用户在重新下载文件之前清除缓存。 在 FTP 而不是 HTTP 上托管文件 提供 MD5 校验和供用户验证下载。

【讨论】:

最终用户非常缺乏经验,理想情况下我不想对他们使用的工具施加任何限制或要求他们清除缓存。 很抱歉重新提出一个老问题,但我面临同样的问题。我喜欢 MD5 校验和的想法,但我们的用户不是技术人员 - 有没有一种简单的万无一失的方法让他们在下载后检查 MD5?

以上是关于如何避免偶尔损坏的下载的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在 UART 通信期间损坏控制器

使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?

如何在没有 X11 的服务器上运行 R,并避免损坏的依赖关系

将 MS Access 用作 Winform 或 WPF 的后端时如何避免损坏 MS Access

后台 iCloud 处理减慢 gui 和损坏视图控制器堆栈-如何停止多次触摸

ActiveRecord中的表名损坏错误