S3.getSignedUrl 接受多种内容类型
S3.getSignedUrl to accept multiple content-type
我正在使用 react-s3-uploader
节点包,它接受一个 signingUrl
来获取用于将对象存储到 S3 中的 signedUrl。
目前我已经配置了一个 lambda 函数(带有一个 API 网关端点)来生成这个 signedUrl。经过一些修补后,我让它开始工作,但注意到我必须在我的 lambda 函数中定义 content-type
,它看起来像这样:
var AWS = require('aws-sdk');
const S3 = new AWS.S3()
AWS.config.update({
region: 'us-west-2'
})
exports.handler = function(event, context) {
console.log('context, ', context)
console.log('event, ', event)
var params = {
Bucket: 'video-bucket',
Key: 'videoname.mp4',
Expires: 120,
ACL: 'public-read',
ContentType:'video/mp4'
};
S3.getSignedUrl('putObject', params, function (err, url) {
console.log('The URL is', url);
context.done(null, {signedUrl: url})
});
}
问题是我希望这个已签名的 url 能够接受多种类型的视频文件,并且我尝试将 ContentType
设置为 video/*
,但这并没有不工作。此外,因为这个 lambda 端点并不是实际进行上传的端点,所以我无法事先将文件类型传递给此函数。
您必须找到一种方法来发现文件类型并将其作为参数传递给 Lambda 函数。没有其他选择,在这里,预签名 PUT
.
PUT
的请求签名过程没有通配符或 multiple/alternative 值的规定。
万一其他人正在寻找有效的答案,我最终发现 react-s3-uploader
确实将内容类型和文件名传递给了 getSignin url(除了我忘记传递通过 API 网关之前的查询),所以我能够在 lambda 中将其提取为 event.params.querystring.contentType
。
然后在参数中,我简单地设置了{ContentType: event.params.querystring.contentType}
,现在它接受所有文件格式。
我正在使用 react-s3-uploader
节点包,它接受一个 signingUrl
来获取用于将对象存储到 S3 中的 signedUrl。
目前我已经配置了一个 lambda 函数(带有一个 API 网关端点)来生成这个 signedUrl。经过一些修补后,我让它开始工作,但注意到我必须在我的 lambda 函数中定义 content-type
,它看起来像这样:
var AWS = require('aws-sdk');
const S3 = new AWS.S3()
AWS.config.update({
region: 'us-west-2'
})
exports.handler = function(event, context) {
console.log('context, ', context)
console.log('event, ', event)
var params = {
Bucket: 'video-bucket',
Key: 'videoname.mp4',
Expires: 120,
ACL: 'public-read',
ContentType:'video/mp4'
};
S3.getSignedUrl('putObject', params, function (err, url) {
console.log('The URL is', url);
context.done(null, {signedUrl: url})
});
}
问题是我希望这个已签名的 url 能够接受多种类型的视频文件,并且我尝试将 ContentType
设置为 video/*
,但这并没有不工作。此外,因为这个 lambda 端点并不是实际进行上传的端点,所以我无法事先将文件类型传递给此函数。
您必须找到一种方法来发现文件类型并将其作为参数传递给 Lambda 函数。没有其他选择,在这里,预签名 PUT
.
PUT
的请求签名过程没有通配符或 multiple/alternative 值的规定。
万一其他人正在寻找有效的答案,我最终发现 react-s3-uploader
确实将内容类型和文件名传递给了 getSignin url(除了我忘记传递通过 API 网关之前的查询),所以我能够在 lambda 中将其提取为 event.params.querystring.contentType
。
然后在参数中,我简单地设置了{ContentType: event.params.querystring.contentType}
,现在它接受所有文件格式。