Могу ли я использовать Sharp с Multer для изменения размера изображения и сохранения на диск за одну операцию?
У меня возникли проблемы с пониманием взаимосвязи между острым и многоуровневым.
В настоящее время я использую multer, чтобы извлечь изображение из req и сохранить его на диск. Работает отлично:
const upload = Multer({
dest: './companyImages',
fileFilter,
limits: {
fileSize: MAX_SIZE
}
})
router
.route('/images')
.post(passportJWT, upload.array('files'), ImageUploadController.saveImage)
Я могу видеть, как я могу использовать Sharp, чтобы прочитать файл с диска или потока и изменить его размер, сохранить его на диск как 2-й файл. Затем я бы использовал fs.unlink для удаления 1-го файла.
sharp('./companyImages/0d928a1a10f462f33b8fed1ea1a20eec.png')
.resize(300, 200)
.toFile('output.jpg', function(err) {
// output.jpg is a 300 pixels wide and 200 pixels high image
// containing a scaled and cropped version of input.jpg
});
Я бы предпочел просто передать вывод с multer на sharp, а затем перейти на диск с sharp.
Проблема в том, что я не определил, как направить вывод мультитера к чему-либо, кроме места назначения на диске. Я ищу мысли и примеры и спасибо заранее!
1 ответ
Есть аддон для multer
может сделать это для вас здесь, но не использовать sharp
для изменения размера. Это пример
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
});