首页 > 解决方案 > S3 - 使用 getSignedUrl 链接上传的视频无法播放并且以错误的格式下载

问题描述

我在服务器端使用带有 Node.JS 的 AWS SDK,并且在从客户端将文件作为 formData 上传时遇到问题。

在服务器端,我有简单的路由,它创建上传链接,稍后将直接从客户端上传视频。

我正在使用 S3 getSignedUrl 方法生成与 putObject 的链接,它为客户端创建 PUT 请求,但会导致 formData 出现非常奇怪的问题。

作为 formData 上传的视频行为不正确 - 而不是播放它 S3 上传的 url 下载了该视频并且它也被破坏了。

这是我在服务器端配置该方法的简单方法:

this.s3.getSignedUrl(
    'putObject',
    {
      Bucket: '<BUCKET_NAME>',
      ContentType: `${contentType}` -> video/mp4 as a rule,
      Key: key,
    },
    (err, url) => {
      if (err) {
        reject(err)
      } else {
        resolve(url)
      }
    },
  )

axios put request with blob 实际上是有效的,但不适用于 formData。

axios.put(url, file, {
  headers: {
    'Content-Type': file.type,
  },
  onUploadProgress: ({ total, loaded }) => {
    setProgress((loaded / total) * 100)
  },
})

这是工作版本,但是当我尝试将文件添加到 formData 时,它被上传到 S3,但视频下载而不是播放。

我在 AWS 方面没有丰富的经验,所以如果有人知道如何处理这个问题,我将不胜感激

标签: amazon-web-serviceswebamazon-s3axios

解决方案


推荐阅读