Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5下载属性不';无法工作,下载时强制重命名文件_Javascript_Node.js_Html_Express - Fatal编程技术网

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&amp;type=image

我尝试了几个星期来更改正在下载的文件的名称。但还是没有运气。文件名不是
jummy.jpg
,而是文件的散列,即
241693260.jpg

在我的后端,我使用Node.js和Express.js处理文件上传/下载。我正在散列文件名和属性,以确保文件不会被覆盖

以下是HTML代码:

<a class="btn btn-info" href="http://localhost:3000/getAttachments?name=Chrysanthemum.jpg&amp;type=image%2Fjpeg&amp;size=879394&amp;lastModified=1247549551674&amp;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 + '"'
        }
    });