我成功地生成了一个签名 URL,可以在有限的时间内使用它来从我的 S3 存储桶下载资源。然而,我正在尝试使用 params 中的 ResponseContentDisposition 属性,如此文档所述:
curl -i "https://foo-dev.s3.amazonaws.com/images/foo.jpg?AWSAccessKeyId=AKIAICBHUC26S6B446PQ&Expires=1468359314&Signature=EeBqx1G83oeusarBl2KUbbCCBgA%3D&response-content-disposition=attachment%3B%20filename%3Ddata.jpg"
标题是:
文档非常简洁,我只能找到PHP示例,但看起来我已经正确设置了内容的分发。有人知道这里出了什么问题吗?
- http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property
- http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property
curl -i "https://foo-dev.s3.amazonaws.com/images/foo.jpg?AWSAccessKeyId=AKIAICBHUC26S6B446PQ&Expires=1468359314&Signature=EeBqx1G83oeusarBl2KUbbCCBgA%3D&response-content-disposition=attachment%3B%20filename%3Ddata.jpg"
标题是:
x-amz-id-2: SG9rjYQCcuqgKfjBmMbDQC2CNLcnqBAFzP7zINa99VYUwNijPOm5Ea/5fllZ6cnt/Qti7e26hbE=
x-amz-request-id: 2670068008525B1D
Date: Tue, 12 Jul 2016 21:26:16 GMT
Content-Disposition: inline; filename=foo.jpg
Last-Modified: Tue, 12 Jul 2016 00:47:23 GMT
ETag: "2a8e36651b24769170f4faa429f40f54"
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 43373
Server: AmazonS3
我正在使用 JavaScript S3 SDK 进行设置,代码如下:
function tempRedirect(req, res) {
var filename = req.params[0];
var contentDisposition = 'attachment; filename=data.jpg';
var params = {
Bucket: S3_BUCKET,
ResponseContentDisposition: contentDisposition,
Key: checkTrailingSlash(getFileKeyDir(req)) + filename
};
var s3 = new aws.S3(s3Options);
s3.getSignedUrl('getObject', params, function(err, url) {
res.redirect(url);
});
};
文档非常简洁,我只能找到PHP示例,但看起来我已经正确设置了内容的分发。有人知道这里出了什么问题吗?
putObject
方法传递一个内容类型参数(例如,可能是contentType:'image/jpeg'
)。然后,当您通过预签名URL下载它们时,对象已经包含处理它作为JPG附件所需的必要元数据;这意味着当您尝试通过预签名URL下载对象时,它知道自动打开一个文件选择器,询问您想要保存适当类型的附件的位置。 - Allison