1

我必须从 FTP 服务器下载 srt 文件,我正在使用以下代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
    $(document).ready(function(){
        $("a").bind('click', function () {
            var a = document.createElement("a");
            a.href = 'ftp://192.168.1.1/mytextfile.srt';
            a.download = 'mytextfile.srt';
            a.click();
        });
    });
</script>
<html>
    <a>Download</a>
</html>

问题是 Chrome 中的文件已打开且未下载。我想当用户点击下载链接下载 srt 文件时。如何强制 Chrome 下载文件?

我需要在 javascript/jQuery 而不是 php 中执行此操作。

4

1 回答 1

1

您不能从 FTP 服务器操作 HTTP 标头,FTP 仅提供数据。因此,您不能使用download属性或Content-Disposition标题。

这意味着由 Chrome 浏览器决定如何处理通过 FTP 切断的文件。我建议您从 HTTP 服务器而不是使用 FTP 来提供文件。

之后,您可以将响应中的Content-Dispositionattachment标头设置为服务器端的:

Content-Disposition: attachment; filename="filename.srt"

或使用 HTML5 锚的download属性,但请注意:

  • 虽然 HTTP(s) URL 需要同源,但 blob: URL 和数据是允许的,以便可以下载 JavaScript 生成的内容。
  • 如果 HTTP 标头 Content-Disposition: 给出的文件名与此属性不同,则 HTTP 标头优先于此属性。
  • 如果 Content-Disposition: 设置为 inline,Firefox 会优先考虑 Content-Disposition,就像文件名大小写一样,而 Chrome 会优先考虑下载属性。
于 2018-09-09T08:24:26.780 回答