#multer #sharp
#multer #sharp
Вопрос:
Мне нужна помощь в использовании sharp, я хочу, чтобы мои изображения изменяли размер при загрузке, но, похоже, я не могу сделать это правильно.
router.post("/", upload.single("image"), async (req, res) => {
const { filename: image } = req.file;
await sharp(req.file.path)
.resize(300, 200)
.jpeg({ quality: 50 })
.toFile(path.resolve(req.file.destination, "resized", image));
fs.unlinkSync(req.file.path);
res.send("sent");
});
Комментарии:
1. эта ссылка содержит и реализацию sharp и multer для загрузки файлов, проверьте это
Ответ №1:
Насколько я знаю, вы должны передавать a Buffer
в sharp, а не путь. Вместо изменения размера сохраненного изображения измените его размер перед сохранением. чтобы реализовать это, вы должны использовать multer.memoryStorage()
as storage.
const multer = require('multer');
const sharp = require('sharp');
const storage = multer.memoryStorage();
const filter = (req, file, cb) => {
if (file.mimetype.split("/")[0] === 'image') {
cb(null, true);
} else {
cb(new Error("Only images are allowed!"));
}
};
exports.imageUploader = multer({
storage,
fileFilter: filter
});
app.post('/', imageUploader.single('photo'), async (req, res, next) => {
// req.file includes the buffer
// path: where to store resized photo
const path = `./public/img/${req.file.filename}`;
// toFile() method stores the image on disk
await sharp(req.file.buffer).resize(300, 300).toFile(path);
next();
});