使用 express 使用 Multer-S3 将高于几 MB 的文件直接上传到 S3
Uploading files higher than few MBs directly to S3 using Multer-S3 using express
我正在尝试使用 Multer-S3 将 PDF 文件直接上传到使用快速服务器的 S3。
出于某种原因,当我尝试上传 SVG 文件时效果很好,但是当我尝试上传其他文件(如 PDF)时没有错误,但是当我尝试访问我的 S3 存储桶中的文件时,它没有打开或显示空白 PDF 页面。
我的代码:
filesService.js
const multer = require('multer');
const multerS3 = require('multer-s3-transform');
const AWS = require('aws-sdk');
const BUCKET_NAME = process.env.FILES_BUCKET_NAME;
const s3 = new AWS.S3({});
var limits = {
files: 1, // allow only 1 file per request
fileSize: 20 * 1024 * 1024 *1024, // (replace MBs allowed with your desires)
};
const upload = multer({
limits: limits,
storage: multerS3({
acl: "public-read",
s3: s3,
bucket: BUCKET_NAME,
contentType: multerS3.AUTO_CONTENT_TYPE,
key: (req, file, cb) => {
console.log(file);
cb(null, file.originalname)
}
})
}).single('file');
module.exports = {upload};
route.js
router.post('/files', async (req, res ,next) => {
await filesService.upload(req, res, (err) => {
if(err) {
console.error(err);
} else {
console.log(req.file);
location = req.file.location;
res.status(200).send({link: req.file.location});
}
});
res.status(500);
})
我正在尝试使用具有以下配置的 Postman 来完成此操作:
Headers: Content-Type - multipart/form-data
Body:键:文件,值:PDF 已选择
我的路线没有返回错误,但是当我尝试访问不同于 SVG 的文件时,它再次不起作用。
作为替代方案,由于我们选择使我们的 PDF 更大,我们决定将 PDF 生成器从前端移动到后端,因此不再需要为此使用 Multer,我们使用 pdfkit
npm 包在 Express 后端服务器上生成 PDF,然后使用 aws-sdk
npm 包直接从同一服务器生成 PDF 后将其上传到相关的 S3 存储桶。
所以,最后我们选择做的只是将相关的PDF数据从前端发送到后端,并在后端生成PDF。
我正在尝试使用 Multer-S3 将 PDF 文件直接上传到使用快速服务器的 S3。
出于某种原因,当我尝试上传 SVG 文件时效果很好,但是当我尝试上传其他文件(如 PDF)时没有错误,但是当我尝试访问我的 S3 存储桶中的文件时,它没有打开或显示空白 PDF 页面。
我的代码:
filesService.js
const multer = require('multer');
const multerS3 = require('multer-s3-transform');
const AWS = require('aws-sdk');
const BUCKET_NAME = process.env.FILES_BUCKET_NAME;
const s3 = new AWS.S3({});
var limits = {
files: 1, // allow only 1 file per request
fileSize: 20 * 1024 * 1024 *1024, // (replace MBs allowed with your desires)
};
const upload = multer({
limits: limits,
storage: multerS3({
acl: "public-read",
s3: s3,
bucket: BUCKET_NAME,
contentType: multerS3.AUTO_CONTENT_TYPE,
key: (req, file, cb) => {
console.log(file);
cb(null, file.originalname)
}
})
}).single('file');
module.exports = {upload};
route.js
router.post('/files', async (req, res ,next) => {
await filesService.upload(req, res, (err) => {
if(err) {
console.error(err);
} else {
console.log(req.file);
location = req.file.location;
res.status(200).send({link: req.file.location});
}
});
res.status(500);
})
我正在尝试使用具有以下配置的 Postman 来完成此操作:
Headers: Content-Type - multipart/form-data
Body:键:文件,值:PDF 已选择
我的路线没有返回错误,但是当我尝试访问不同于 SVG 的文件时,它再次不起作用。
作为替代方案,由于我们选择使我们的 PDF 更大,我们决定将 PDF 生成器从前端移动到后端,因此不再需要为此使用 Multer,我们使用 pdfkit
npm 包在 Express 后端服务器上生成 PDF,然后使用 aws-sdk
npm 包直接从同一服务器生成 PDF 后将其上传到相关的 S3 存储桶。
所以,最后我们选择做的只是将相关的PDF数据从前端发送到后端,并在后端生成PDF。