Как изменить размер изображения с помощью sharp, а затем загрузить его с помощью multer в nodejs
Я разрабатываю функцию, позволяющую пользователю загружать изображения в mongodb с помощью nodejs:
Моя проблема:
Получить файл изображения по запросу пользователя и выполнить 2 задачу: сохранить текущее изображение в mongodb, например, с именем коллекции "Origin_image", изменить размер текущего изображения и сохранить в mongodb с именем коллекции "Thumbnail_image".
Мое решение до сих пор:
Я только сохраняю исходное изображение успеха с помощью multer-gridfs-storage и кода типа multer ниже
const multer = require ('multer'); const GridFsStorage = require ('multer-gridfs-storage');
const multer = require ('multer'); const GridFsStorage = require ('multer-gridfs-storage');
let storageFS = new GridFsStorage({ db: app.get("mongodb"), file: (req, file) => { return new Promise((resolve, reject) => { crypto.randomBytes(16, (err, buf) => { if (err) { return reject(err); } const filename = file.originalname; const fileInfo = { filename: filename, bucketName: 'images' }; resolve(fileInfo); }); }); } }); var upload = multer({ storage: storageFS }).single('image'); exports.uploadImage = async function (req, res) { try { upload(req, res, function (err) { if (err) { return res.send(err) } res.json({ status: true, filePath: req.file.originalname }); }); } catch (error) { res.send(error); } }
У кого-нибудь есть идеи, чтобы решить мою проблему? Спасибо!
0 ответов
Если вы используете Angular на своем веб-интерфейсе, позвольте конечному пользователю обрабатывать изменение размера изображения, чтобы вашему серверу не приходилось справляться с накладными расходами. В настоящее время я использую ng2-img-max для изменения размера изображений. Вы можете инициировать изменение размера при изменении файла.
Я также хотел иметь миниатюры, а затем оригинал, но это вызвало огромную проблему с производительностью при изменении их размера, а затем еще раз, как связать их, поскольку GridFs хранит их, прежде чем вы сможете что-либо с ними сделать, и все, что у вас осталось, - это ответ. Так что сэкономьте время. Измените размер только один раз, до вашего ограниченного размера для пользователя, а затем для отображения миниатюрных изображений используйте Sharp с пользовательскими параметрами запроса, чтобы отобразить нужный размер.
Удачи и счастливого кодирования.