S3 下载文件名中带有逗号的图像会导致“net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION”

eag*_*poo 5 javascript amazon-s3 amazon-web-services node.js

我存储了用户在 AWS S3 上上传的图像。当用户在浏览器中查看这些图像时,他们有指向我的应用程序的 url,我在那里使用 s3.getSignedUrl 重定向到一个临时签名的 url。99% 的情况下,一切都很好。

问题是,用户偶尔会上传文件名中包含逗号的图像。当他们然后尝试在 Chrome(并且只有 chrome)中查看该图像时,我收到此错误

net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
Run Code Online (Sandbox Code Playgroud)

我发现这是逗号,因为其他几个人也有类似的问题,他们通过设置 content-disposition 标头解决了这个问题。

使用 s3 和getSignedUrl,我认为这可以通过在 params 参数中设置 ReponseContentDisposition 属性来完成。具体的解决方法是在内容处置中正确引用文件名,或者只是将文件名设置为根本不包含逗号的其他内容。

然而,那个计划对我不起作用。有人对我可能出错的细节有任何想法吗?

我的服务器是 Node.js。这是执行重定向的 js(就像我说的通常效果很好)

function tempRedirect(req, res) {
    var filename = req.params[0];
    var params = {
        Bucket: S3_BUCKET,
        ResponseContentDisposition: 'inline; filename=' + filename.replace(/,/, '_'),
        Key: checkTrailingSlash(getFileKeyDir(req)) + filename
    };
    var s3 = new aws.S3(s3Options);
    s3.getSignedUrl('getObject', params, function(err, url) {
        res.redirect(url);
    });
};
Run Code Online (Sandbox Code Playgroud)