上传视频 (4mb) base64 编码时远程服务器卡住

问题描述

我正在尝试使用 nodejs 后端服务器将视频从 React Native 应用程序上传到 aws s3 存储桶。我的方法是,

  1. 在 React Native 应用程序级别将视频转换为 base64
  2. 通过在请求中附加 base64 数据作为表单数据向后端服务器发送 POST 请求
  3. 在后端服务器上使用 multer 上传到 s3 存储桶。

我在使用这种方法时遇到了一些问题

我可以上传小尺寸视频 (kb),当我尝试上传 4mb 视频时,它在我的本地机器上运行良好,但在服务器(具有 1Gb 内存的 aws ec2 实例)中,这导致服务器卡住。

const params = {
      Bucket: S3_VIDEO_BUCKET_NAME,Key: `${name}`,Body: bufferContent,ContentEncoding: 'base64',ContentType: `${context}/${type}`,}

s3.upload(params,function (err,data) {
        if (err) {
          console.log('Error',err)
          isError = true
        }
        if (data) {
          console.log('Upload Success',data.Location)
          console.log(`${S3_VIDEO_CLOUD_FRONT_DOMAIN}${data.Key}`)
          key = data.Key
        }
})
  1. 当我上传大小约为 (4mb) 的视频时,为什么远程服务器会卡住,而本地服务器没有这个问题?

  2. 转换为 base 64 是最好的方法还是有办法将视频上传到 s3 存储桶而不将视频转换为 base 64?

已编辑 => 我正在使用 multer 并且最大 fieldSize 为 20mb。

var upload = multer({ limits: { fieldSize: 20 * 1024 * 1024 } }) 

解决方法

如果您的服务器使用 nginx,那么您可能需要检查 client_max_body_size,它通常默认为 1mb Changing Nginx body size