Могу ли я использовать Sharp с Multer для изменения размера изображения и сохранения на диск за одну операцию? - PullRequest
0 голосов
/ 11 декабря 2018

У меня возникли проблемы с пониманием взаимосвязи между острым и мультером.

В настоящее время я использую 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 Ответ

0 голосов
/ 11 декабря 2018

Существует дополнение для 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
});
...