Javascript HTML5下载属性不';无法工作,下载时强制重命名文件
我尝试了几个星期来更改正在下载的文件的名称。但还是没有运气。文件名不是Javascript HTML5下载属性不';无法工作,下载时强制重命名文件,javascript,node.js,html,express,Javascript,Node.js,Html,Express,我尝试了几个星期来更改正在下载的文件的名称。但还是没有运气。文件名不是jummy.jpg,而是文件的散列,即241693260.jpg 在我的后端,我使用Node.js和Express.js处理文件上传/下载。我正在散列文件名和属性,以确保文件不会被覆盖 以下是HTML代码: <a class="btn btn-info" href="http://localhost:3000/getAttachments?name=Chrysanthemum.jpg&type=image
jummy.jpg
,而是文件的散列,即241693260.jpg
在我的后端,我使用Node.js和Express.js处理文件上传/下载。我正在散列文件名和属性,以确保文件不会被覆盖
以下是HTML代码:
<a class="btn btn-info" href="http://localhost:3000/getAttachments?name=Chrysanthemum.jpg&type=image%2Fjpeg&size=879394&lastModified=1247549551674&extension=jpg" download="Chrysanthemum.jpg" target="_blank">Download File</a>
因此,当我在后端重命名文件名时,我尝试使用HTML5将文件重命名回其原始名称,但没有成功
更新:使用express的sendFile会导致相同的问题
更新:我的服务器正在使用跨源使用Node JS重新命名文件,而不是HTML5是最好的选择
一年前我遇到了这个问题,花了很多时间才发现这是Chrome的潜在问题
避免重复名称,可以使用带增量的静态id。希望这个答案会有帮助您所要做的就是提供您希望下载文件的完整文件名。在您的内容配置中,您似乎没有提供完整的文件名
res.sendFile(__dirname + "/uploads/" + fileToBeSent, {
headers: {
'Content-Disposition': 'attachment; filename="' + req.query.name + '"'
}
});
尝试测试此项时使用的浏览器。根据IE和Safari仍然不支持此属性…Google Chrome和Firefox。@War10ck我认为这不是浏览器的问题,而是HTML5的下载属性的问题。根据MDN:1,此属性的使用有一些限制。如果HTTP标头Content Disposition:存在并且提供的文件名与此属性不同,则HTTP标头的优先级高于此属性。2。如果此属性存在且Content-Disposition:设置为inline,Firefox将优先考虑内容配置,就像文件名大小写一样,而Chrome将优先考虑下载属性。此属性仅适用于指向具有相同来源的资源的链接。。您可以使用ajax获取文件内容,并使用window.URL或dataURL填充href。这样,服务器的头配置就无关紧要了,而且您可以获得一致的跨浏览器行为。那么,我如何保证两个不同的文件在下载之前没有重命名为相同的名称,并且它们会被对方覆盖呢。此解决方案有问题。将文件重命名为“菊花散列”是否可以解决您的问题,其中_散列是现有的散列?
res.sendFile(__dirname + "/uploads/" + fileToBeSent, {
headers: {
'Content-Disposition': 'attachment; filename="' + req.query.name + '"'
}
});