node.js - S3.getSignedUrl 接受多种内容类型

标签 node.js amazon-web-services amazon-s3 aws-lambda aws-sdk

我正在使用 react-s3-uploader Node 包,它接受一个 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 的请求签名过程没有提供通配符或多个/替代值。

关于node.js - S3.getSignedUrl 接受多种内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192068/

相关文章:

amazon-web-services - 即时视频结果

php - Laravel 9 getDriver()、getAdapter() 和 getClient() 方法

amazon-web-services - 通过 Beeline 使用 Spark SQL 时无法加载 AWS 凭证

javascript - 使用 NodeJS 设置环境变量

mysql - 使用 MySQL 在 PassportJs 中多个序列化用户

node.js - MongoError : Can't canonicalize query: BadValue bad order array [2]

node.js - 从服务器获取 json 数据后尝试将其呈现给客户端,但仅显示第一个元素

reactjs - 将 create-react-app npm start 与 AWS Cloud9 一起使用

amazon-web-services - Terraform 不会将步骤函数部署到 API 网关

java - 在 Maven 中下载 Artifact 时显示详细日志