【发布时间】:2021-03-28 18:20:04
【问题描述】:
我希望用户能够将 JPG 或 PNG 图像上传到 S3 存储桶。
我正在使用 Lambda 函数,它只允许我为 S3 预签名 .jpg 图像,并且它仅适用于一种文件类型。如何添加其他文件类型来预签名,例如 .png 图像。我真的需要编写一个新的 Lambda,只需将 .jpg 更改为 .png,或者我可以在下面的现有代码中以某种方式完成吗?
const AWS = require('aws-sdk')
AWS.config.update({ region: process.env.REGION })
const s3 = new AWS.S3();
const uploadBucket = 'xxx-bucket'
exports.handler = async (event) => {
const result = await getUploadURL()
console.log('Result: ', result)
return result
};
const getUploadURL = async function() {
console.log('getUploadURL started')
let actionId = Date.now()
var s3Params = {
Bucket: uploadBucket,
Key: `${actionId}.jpg`,
ContentType: 'image/jpeg',
CacheControl: 'max-age=31104000',
ACL: 'public-read',
};
return new Promise((resolve, reject) => {
// Get signed URL
let uploadURL = s3.getSignedUrl('putObject', s3Params)
resolve({
"statusCode": 200,
"isBase64Encoded": false,
"headers": {
"Access-Control-Allow-Origin": "*"
},
"body": JSON.stringify({
"uploadURL": uploadURL,
"photoFilename": `${actionId}.jpg`
})
})
})
}
【问题讨论】:
-
s3Params中的项目将强制上传,因为它们是签名部分的一部分。因此,请尝试删除Key: '${actionId}.jpg'和ContentType: 'image/jpeg'。这应该允许上传任何内容。
标签: amazon-web-services amazon-s3 aws-lambda serverless