简而言之,我试图通过重定向,aws lambda和aws-sdk来调整图像大小。
按照使用AWS AWS - resize-images-on-the-fly动态调整图像大小的教程,我已经设法根据演练使一切正常工作,但是我的问题与调用存储桶有关
目前我能让这个工作的唯一方法是打电话,
http://MY_BUCKET_WEBSITE_HOSTNAME/25×25/blue_marble.jpg
。
如果图像不可用,则会重定向请求,调整图像大小,然后将其放回存储桶中。
我想做的是通过s3.getObject()调用访问aws-sdk中的存储桶,而不是直接链接。
截至目前,我只能访问当前位于存储桶中的图像,因此重定向永远不会发生。
我的想法是请求没有被发送到正确的端点,并且从我在网上找到的,我改变了创建sdk的方式 -
s3 = new aws.S3({
accessKeyId: "myAccessKeyId",
secretAccessKey: "mySecretAccessKey",
region: "us-west-2",
endpoint: '<MYBUCKET>.s3-website-us-west-2.amazonaws.com',
s3BucketEndpoint: true,
sslEnabled: false,
signatureVersion: 'v4'
})
params = {
Bucket: 'MY_BUCKET',
Key: '85x85/blue_marble.jpg'
};
s3.getObject(params, (error, data) => data);
当我直接在浏览器中访问端点时,一切都按预期工作。
但是在使用sdk时,只返回可用的图像。没有重定向,没有数据返回,我收到错误。
XMLParserError:第一个标记之前的非空格。
不确定是否可以使用s3.getObject(),似乎可能,但我似乎无法弄明白。
答案 0 :(得分:0)
使用headObject检查对象是否存在。如果没有,您可以调用您的API进行调整大小&amp;然后在调整大小后重试get。
var params = {
Bucket: config.get('s3bucket'),
Key: path
};
s3.headObject(params, function (err, metadata) {
if (err && err.code === 'NotFound') {
// Call your resize API here. Once your resize API returns a success, you can get the object\URL.
} else {
s3.getSignedUrl('getObject', params, callback); //Use this secure URL to access the object.
}
});