我正在尝试几周来更改正在下载的文件的名称。但仍然没有运气。它不是文件名Chrysanthemum.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>
这是我的后端:
app.use('/uploads', express.static(__dirname + "/uploads"));
app.get("/getAttachments", function (req, res) {
try {
var fileToBeSent = hashCode(req.query.name + req.query.type + req.query.size + req.query.lastModified + req.query.extension);
fileToBeSent += req.query.extension ? '.' + req.query.extension : '';
// res.sendFile("./uploads/" + fileToBeSent, {
// root: __dirname,
// "Content-Disposition": '"attachment; filename="' + (req.query.extension ? '.' + req.query.extension : '') + '"',
// "Content-Type": "application/octet-stream"
// });
res.redirect("/uploads/" + fileToBeSent);
} catch (err) {
console.log("an attempt to GET a file that doesn't exist.");
}
});
因此,当我在后端重命名文件名时,我正在尝试使用HTML5将文件重命名为原始名称,但我没有成功。
更新:在同一问题中使用express的sendFile结果。
更新:我的服务器使用跨源
答案 0 :(得分:2)
我在一年前遇到过这个问题并花了很多时间才发现这是Chrome的潜在问题Prove for version 35 and later 避免重复名称,您可以使用带增量的静态ID。希望这个答案会有所帮助
答案 1 :(得分:2)
您所要做的就是提供您希望将文件下载的整个文件名。在您的内容处置中,它看起来并不像您提供整个文件名。
res.sendFile(__dirname + "/uploads/" + fileToBeSent, {
headers: {
'Content-Disposition': 'attachment; filename="' + req.query.name + '"'
}
});
答案 2 :(得分:0)
使用Node JS重新命名文件,而不是HTML5是最好的选择。