javascript - 使用预签名 URL 将图像上传到 S3

标签 javascript amazon-web-services amazon-s3 aws-sdk

让一个简单的测试工作让我感到很痛苦。我正在使用 React Native 开发移动应用程序。我想生成一个预签名 URL 并使用该 url 将视频文件上传到 s3。我目前只是尝试通过以下方式测试这种方法:

const file = fs.readFileSync('./video.mp4')
s3.getSignedUrl('putObject', {Bucket: 'mybucket', Key: 'video.mp4'}, (err, url) => {
  if (err) { console.log(err); }
  else {
    fetch(url, {
       method: 'PUT',
       body: file
    })
    .then(success => console.log(success.status))
    .catch(e => console.log(e))
  })
})

我得到一个 200 状态代码,但出现在 S3 上的"file"有 0 个字节。当我尝试上传通过 fs.readFileSync 收到的任何文件时,我注意到同样的事情发生了。 我暂时通过 fs.readFileSync('./video.mp4', 'base64') 设法解决了这个问题,但这在我的应用程序中不起作用,因为我需要以原始格式访问视频,而不是一个 base64 字符串。我也成功地使用了 s3.upload,但这在我的应用程序中也不起作用,因为我想在我授予用户与 s3 交互的权限之前验证我的所有用户在我的服务器上的操作。 我真的很感激一些建议。我整天都在摆弄 ContentTypes 和 ContentLengths。

最佳答案

您需要使用 FormData 将您的文件与名为 file 的参数包装在一起,如下所示:

var body = new FormData();
body.append('file', file);
fetch(url, { method: 'PUT', body: body });

关于javascript - 使用预签名 URL 将图像上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36682292/

相关文章:

JavaScript setTimeout,使用调用来更改此设置

java - 使用 uploadDirectory 从 android 到 S3 的示例

javascript - 不间断地播放多部分视频 (HTML5)

javascript - 为什么它首先打印出 "undefined"?

java - AWS Kinesis - 如何从上一个检查点恢复消费

amazon-web-services - 仅接口(interface)和 GatewayLoadBalancer 类型的 VPC 终端节点支持子网 ID

java - 亚马逊 MWS:报告和订单列表之间的区别

ios - 使用 IOS 6 分段上传到 Amazon S3

go - 使用路径式 amazon aws sdk go

javascript - FabricJS 从服务器端的路径加载图像?