文件下载重命名不起作用

时间:2015-11-20 15:21:36

标签: html html5 google-chrome

我尝试使用download属性重命名文件,但它无效。

<a href="https://jsfiddle.net/img/logo.png" download="something.png">OK</a>

FIDDLE

3 个答案:

答案 0 :(得分:5)

来自您关联的文档:

  

如果HTTP标头Content-Disposition:存在且提供的文件名与此属性不同,则HTTP标头优先于此属性。

我的猜测是你要链接的服务器设置了这个标题。

此外,如果您要链接到外部资源,它可能无法正常工作:

  

此属性仅适用于具有相同来源的资源的链接。

答案 1 :(得分:5)

仅当文件位于同一个源时才有效,因此如果您可以使用CORS + ajax下载外部文件,则可以使用自定义名称保存blob

&#13;
&#13;
$('a').click(function(evt){
    evt.preventDefault();
    var name = this.download;
   
    // we need a blob so we can create a objectURL and use it on a link element
    // jQuery don't support responseType = 'blob' (yet)
    // So I use the next version of ajax only avalible in blink & firefox
    // it also works fine by using XMLHttpRequest v2 and set the responseType
    fetch("https://crossorigin.me/" + this.href)
        // res is the beginning of a request it only gets the response headers
        // here you can use .blob() .text() .json or res.arrayBuffer() depending
        // on what you need, if it contains Content-Type: application/json
        // then you might want to choose res.json() 
        // all this returns a promise
        .then(res => res.blob())
        .then(blob => {
            $("<a>").attr({
                download: name,
                href: URL.createObjectURL(blob)
            })[0].click();
        });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a href="https://jsfiddle.net/img/logo.png" download="something.png">OK</a>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

由于可能存在安全问题,此属性似乎不再适用于外部文件。

您可以在Chrome here

中找到有关此问题的讨论
  

使用&#39;下载&#39;属性将始终触发下载,但是如果最终资源URL与文档的原点相同,那么从M-35开始的将仅遵循建议的文件名。即使它没有,也是如此如果正确指定了MIME类型,则会收到类似&#39;下载的文件名。&#39;其中主机操作系统已知的扩展名为映射到指定的MIME类型。如果资源是使用Content-Disposition提供的,那么Content-Disposition将优先使用。

适用于Firefox herehere