Javascript在下载时重命名文件

时间:2011-09-15 09:40:17

标签: javascript file download

我希望能够下载网络文件,但是当打开下载对话框时,会重命名文件名。

例如:文件:http://<server>/<site>/test.txt

当我点击下载文件时,下载对话框打开,文件名为:test001.txt

我怎样才能实现?

6 个答案:

答案 0 :(得分:16)

正如InviS建议的那样,现在链接上有download属性。

示例:

<a href="http://server/site/test.txt" download="test001.txt">Download Your File</a>

答案 1 :(得分:2)

此效果通过发送附加标头来完成。例如,您可以使用PHP来实现此目的:

可以使用.htaccess重写URL,(内部)将请求重定向到PHP文件。我将展示一个简单的硬编码示例,说明如何设置标头:

<?php
    header('Content-type: text/plain');
    header('Content-Disposition: attachment; filename="test001.txt"');
    readfile('files/test.txt');
     //assuming that the files are stored in a directory, not in a database
?>

答案 2 :(得分:2)

使用链接的download属性。但它仅适用于Chrome浏览器:)

答案 3 :(得分:0)

你不能在Javascript中这样做。 “保存到”-dialog由浏览器打开,您无法通过JS访问它,它是来自操作系统的标准对话框。

在用户点击下载链接之前,您的服务器必须提供所需名称的文件。

您想要重命名下载的文件的原因是什么?

答案 4 :(得分:0)

如果你想要的是返回连续类型的文件名,你必须编写一个脚本来跟踪它并将该文件提供给用户。一种方法是使用普通的PHP,或者更高级的东西,如果它一次是几个文件,可能是php中的cURL调用,因此它可以生成几个不同的文件。我猜这是你正在做的事情,但你不能在保存盒上动态更改文件名,在这个意义上,你返回savename.txt文件名。

答案 5 :(得分:0)

您可以在链接标签<a href="http://server/site/test.txt" download="test001.txt">Download Your File</a>上使用download属性

但是,在服务器响应上设置content-disposition标头时,它将忽略下载属性,而文件名将设置为content-disposition响应标头中的文件名

您可以使用axios或其他任何获取方式来完成此操作:

const downloadAs = (url, name) => {
  Axios.get(url, {
    headers: {
      "Content-Type": "application/octet-stream"
    },
    responseType: "blob"
  })
    .then(response => {
      const a = document.createElement("a");
      const url = window.URL.createObjectURL(response.data);
      a.href = url;
      a.download = name;
      a.click();
    })
    .catch(err => {
      console.log("error", err);
    });
};

用法:

downloadAs('filedownloadlink', 'newfilename');

注意:如果文件很大,在下载整个文件之前,它似乎什么也不做,因此请确保向用户显示一些消息或指示,以使他们知道它正在做某事< / p>