通过标记或JS强制下载

时间:2010-02-01 11:29:49

标签: javascript html http html5

让我们假设我在CDN上有一个文件(来自Rackspace的Cloud Files)和一个带有该文件链接的静态html页面。有什么方法可以强制下载这个文件(以防止它在浏览器中打开 - 例如对于mp3)?

我们可以让我们的服务器读取文件并将相应的标题设置为:

header("Content-Type: application/force-download")

但我们每月的下载量约为500万,所以我们宁愿让CDN来处理这个问题。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

无法在HTML或JavaScript中执行此操作。 There is now! (Ish. See @BruceAldrige’s answer below.)

HTTP Content-Disposition标头告诉浏览器下载文件,并由服务器发送。您必须配置CDN以使用您希望浏览器下载而不是显示的文件发送该标头。

无益,我对Rackspace的Cloud Files服务完全不熟悉,所以我不知道他们是否允许这样做,也不知道如何做到这一点。刚刚发现一个2009年12月的页面,暗示没想到,遗憾的是:

  

Cloud Files无法使用“Content-Disposition:attachment”HTTP标头提供文件。因此,可以在任何其他服务中完美运行的下载链接可能导致浏览器直接呈现文件。 Rackspace工程师证实了这一点。 : - (

     

http://drupal.org/node/656714

我知道你可以使用亚马逊的CloudFront服务,因为它得到S3的支持(参见例如http://blog.cloudberrylab.com/2009/06/how-to-set-custom-http-headers-for.html

答案 1 :(得分:2)

答案 2 :(得分:1)

是的,您可以通过cloudfiles API执行此操作。使用方法流可以流式传输文件内容 - 设置自己的标题等。

答案 3 :(得分:0)

一个疯狂的想法:通过XMLHttpRequest下载并提供您想要的内容类型的data:网址? :P