在我的nodejs应用程序中通过multer上传两个文件时,我需要帮助。我通过Sharp对其进行处理以调整大小,但它会同时剪切两个文件。 如何分别设置每个文件的设置?
以下代码:
// main upload function
const upload = multer({
...
sharp: (req, file, cb) => {
const resizer = Sharp()
.resize(1024, 1024)
cb(null, resizer)
}
})
// for uploading some files
let cpUpload = upload.fields([{ name: 'image1', maxCount: 1 }, { name: 'image2', maxCount: 1 }])
// getting files
router.post('/', cpUpload, async (req, res) => { ... })
答案 0 :(得分:1)
首先,您必须声明multer函数,还可以向该函数添加任何属性。我也提到了一些属性。这是更多信息,link
//uploading images and validations
const upload = multer({
limits: {
fileSize: 1000000 //maximum size of an image
},
fileFilter(req, file, cb) {
// checking if file extension does not match with jpg,png,jpeg
if (!file.originalname.match(/\.(jpg|png|jpeg)$/)) {
return cb(new Error('Please upload a image.')); // if it is then throw an error
}
cb(undefined, true);
}
});
然后必须用尖角声明路线,基本上尖角是
此高速Node.js模块的典型用例是将 常用格式的大图片,缩小为适合网络使用的JPEG,PNG和 不同尺寸的WebP图像。
这里是link,以获取更多信息。
//create photo
router.post('/',upload.array('pic', 10),async (req, res) => {
try {
const promises = req.files.map((file) => {
return sharp(file.buffer).resize({ width: 1024,
height: 1024}).png().toBuffer();
});
const buffers = await Promise.all(promises);
const photos = buffers.map((buffer) => {
return new Photo({ pic: buffer});
});
await Photo.insertMany(photos);
res.redirect('/');
} catch (e) {
res.status(400).redirect('/');
}
},
(error, req, res, next) => {
res.status(400).redirect('/');
}
);
答案 1 :(得分:0)
Sharp方法用于调整我们要上传的所有图像的大小,其基本用途是节省存储容量。有两种方法可以实现您想要的。如果要与现有的一起使用,请使用第一个。您可以使用 multer 的过滤器方法,并执行要在特定文件上执行的操作。
const upload = multer({
fileFilter: function (req, file, cb) {
yourFunctionToPerformResize(file, cb);
}
});
第二,您可以使用 MulterResizer 调整想要的特定图像的大小。这是link。
const multer = require('multer');
const MulterResizer = require('multer-resizer');
const resizer = new MulterResizer({
multer: multer({storage: multer.diskStorage({destination: './'})}),
tasks: [
{
resize: {
width: 1920,
height: 1080,
suffix: 'resized-big'
}
},
{
resize: {
width: 100,
height: 100,
suffix: 'resized-small'
}
},
{
cover: {
width: 160,
height: 112,
suffix: 'thumbnail'
}
}
]
});
router.post('/', auth.ensureAuthentication, resizer.single('file'), function(req, res, next) {
// All multer-resizer tasks were completed
});