HTML5下载属性不起作用,强制下载文件重命名

时间:2015-07-13 17:25:32

标签: javascript node.js html5 express

我正在尝试几周来更改正在下载的文件的名称。但仍然没有运气。它不是文件名Chrysanthemum.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>

这是我的后端:

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结果。

更新:我的服务器使用跨源

3 个答案:

答案 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是最好的选择。

Renaming files using node.js