Multer s3上传:s3中的文件无法播放并且文件增加

问题描述 投票:0回答:1

我正在通过node.js s3将mp4文件上传到s3。

代码有效,我在 s3 中看到该文件。然而,原始文件是 860kb,但上传时它变成 1.4MB,当我从 S3 下载它时它永远不会播放。

代码:

//设置

const storageS3: StorageEngine = multer.memoryStorage();
const uploadS3 = multer({ storage: storageS3 });

//上传

const s3Upload = async (req: Request, res: Response, next: NextFunction) => {
  const files = req.files as Express.Multer.File[];
  const uploadPromises = files.map(async (file) => {

    const params = {
      Bucket: process.env.S3_BUCKET_NAME!,
      Key: `uploads/${file.originalname}`, 
      Body: file.buffer,
      ContentType: "video/mp4", // for test purposes
    };

    return s3.upload(params).promise();
  });

  try {
    await Promise.all(uploadPromises);
    next();
  } catch (err) {
    next(err);
  }
};

//路由中间件

const determineUploadHandler = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  if (isLocal) {
    upload.array("media")(req, res, next);
  } else {
    logFileSizeBeforeMulter(req, res, () => {
      uploadS3.array("media")(req, res, async (err) => {
        if (err) return next(err);
        await s3Upload(req, res, next);
      });
    });
  }
};

路线

export const uploadHandler = router.post(
  "/",
  determineUploadHandler,
  (req: Request, res: Response) => {
    res.status(200).json({ message: "Files uploaded successfully" });
  }
);

文件:

enter image description here

在 s3 中:

enter image description here

我下载了文件,但视频从未开始。我做错了什么?

node.js typescript amazon-web-services amazon-s3 multer
1个回答
0
投票

所以我发现了问题。

获取双倍大小时出现问题,问题似乎出在 APIGateway 中。

我添加了这个:

  apiGateway:
    binaryMediaTypes:
      - "multipart/form-data"

在我的无服务器文件中,现在它可以工作了。

详细解答这里

© www.soinside.com 2019 - 2024. All rights reserved.