我有一个网站,提示用户从外部资源下载文件。由于外部文件名经过哈希处理并且用户下载了多个文件,因此用户很难知道他们下载的哪个文件到达了他们请求的资源。例如,fdae442dafe42.zip
的文件名可以是 production-resources.zip
。
我正在寻找获得它的方法,以便浏览器将文件下载为不同的名称。以下是我的一些想法以及它们为何不起作用,但您或许可以找到解决方法。
请注意,我对外部资源没有任何控制权。我将无法更改标题或其他任何内容。我的服务是一个主要针对桌面用户的网站。 Android 和 iOS 解决方案不会那么有益。
下载属性
这个方法在 Google Chrome 和 Firefox 中工作了一段时间,但后来他们开始关注 W3 HTML5 spec .外部资源需要发送 Content-Disposition
头,Google Chrome 和 Firefox 之前没有检查。
PHP 代理下载
我知道我可以让 PHP 脚本向外部资源发出请求,然后将其交付给最终用户,同时更改 header 和名称以满足我的需要。问题是网站流量很高,每个用户下载大约 1-2GB 的数据。我的服务器无法处理这种类型的流量,升级服务器的成本可能太高。
使用外部应用重命名文件
我正在考虑使用外部应用程序(可能是 Chrome/Firefox 扩展程序),它会在文件下载完成后重命名文件。但考虑到我的观众中有足够多的人是一次性访问者,要求他们下载应用程序或扩展程序的可能性很小。
Flash 或 Java 嵌入式解决方案
我正在考虑使用 Java 或 Flash 嵌入式文件来处理文件下载,但我对这两个平台都不太了解。据我所知,Flash 对用户的文件系统没有太多控制权,因此这可能是个问题。 Java 将能够完成这项任务,但我真的希望我不必使用 Java,因为它通常不安全并且需要大量下载才能安装它(与外部软件想法相同的问题)。
如果您对我可以做些什么来解决这个问题有任何想法,他们将不胜感激。我不是在寻找任何代码,只是关于如何完成上述任务的想法。我要感谢大家的时间和专业知识。
最佳答案
您指的是什么外部资源?
如果恰好是Amazon的S3,它允许你生成下载URL并指定Content-Disposition下载时应该出现在服务器的响应中。在那里你可以编码浏览器在保存文件时应该使用的文件名。
如果是其他服务,看看它的文档,也许它有类似的功能。
关于javascript - 下载外部资源 - 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836384/