我正在通过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" });
}
);
文件:
在 s3 中:
我下载了文件,但视频从未开始。我做错了什么?
所以我发现了问题。
获取双倍大小时出现问题,问题似乎出在 APIGateway 中。
我添加了这个:
apiGateway:
binaryMediaTypes:
- "multipart/form-data"
在我的无服务器文件中,现在它可以工作了。
详细解答这里