我希望能够下载网络文件,但是当打开下载对话框时,会重命名文件名。
例如:文件:http://<server>/<site>/test.txt
当我点击下载文件时,下载对话框打开,文件名为:test001.txt
。
我怎样才能实现?
答案 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>