#node.js #express #multer
#node.js #экспресс #мультер
Вопрос:
Я создаю веб-приложение, которое позволяет пользователям загружать аватар. Однако в дополнение к аватару я хочу создать эскиз с низким разрешением (например, 64 x 64) и сохранить его на своем сервере. В настоящее время я использую этот код для хранения изображения в двух каталогах, но в обоих каталогах оно имеет одинаковое разрешение. Как мне сохранить другое разрешение в каталоге эскизов?
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads/thumbs');
callback(null, './uploads');
},
filename: function (req, file, callback) {
callback(null, file.fieldname '-' Date.now());
}
});
Ответ №1:
Вы можете использовать sharp для изменения размера изображений в вашем маршрутизаторе:
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './uploads')
},
filename: (req, file, cb) => {
cb(null, file.fieldname '-' Date.now() path.extname(file.originalname))
}
})
и:
router.post('/', upload.single('image'), async (req, res) => {
try {
const { filename: image } = req.file
await sharp(req.file.path, { failOnError: false })
.resize(64, 64)
.withMetadata()
.toFile(
path.resolve(req.file.destination, './thumbs', image.replace(/.(jpeg|png)$/, `.jpg`))
)
fs.unlink(req.file.path)
return res.json({
thumb_url: '/uploads/thumbs/' image.replace(/.(jpeg|png)$/, `.jpg`)
});
} catch (err) {
console.error(err.message);
res.status(500).send('Server Error!');
}
});
fs.unlink(req.file.path)
удалите исходное изображение из ./uploads
Комментарии:
1. Ошибка: входной файл отсутствует, я использую фактически тот же код, а req.file.buffer тоже не определен???
2. если вы используете multer и express-fileupload вместе, вам следует удалить express-fileupload или аналогичную библиотеку загрузки файлов