Как добавить sharp c помощью multer mongoose.js?
Есть такая загрузка изображений, она работает все хорошо, но когда идет загрузка больших файлов есть проблемы с рендерингом, долго загружает их отображение. Поэтому возник вопрос как можно их компрессировать чтобы они быстрее грузились, знаю что есть sharp, но не могу добавить его в этот код
var multer = require('multer');
var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads')
},
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({ storage: storage });
app.post("/user/img/:id/img", upload.single('img'), controller.userImgUpl);
exports.userImgUpl = async (req, res) => {
const id = req.params.id;
const image = new Image({
img: {
data: fs.readFileSync(path.join(__dirname, '..', '..', 'uploads', req.file.filename)),
contentType: 'image/png'
},
user: id
})
await image.save();
const related = await User.findById(id);
related.images.push(image);
await related.save(function(err) {
if(err) {console.log(err)}
res.status(200).send("user Content.");
})
};
Ответы (1 шт):
Автор решения: Sanset
→ Ссылка
все я решил сам, если кому интересно:
exports.userImgUpl = async (req, res) => {
const id = req.params.id;
const file = fs.readFileSync(path.join(__dirname, '..', '..', 'uploads', req.file.filename))
await sharp(file)
.resize({
width: 1920,
height: 1080
})
.toFile(path.join(__dirname, '..', '..', 'uploadsCompress', req.file.filename))
try {
fs.unlinkSync(path.join(__dirname, '..', '..', 'uploads', req.file.filename))
} catch (error) {
console.log(error)
}
const image = new Image({
img: {
data: fs.readFileSync(path.join(__dirname, '..', '..', 'uploadsCompress', req.file.filename)),
contentType: 'image/png'
},
user: id
})
try {
fs.unlinkSync(path.join(__dirname, '..', '..', 'uploadsCompress', req.file.filename))
} catch (error) {
console.log(error)
}
await image.save();
const related = await User.findById(id);
related.images.push(image);
await related.save(function(err) {
if(err) {console.log(err)}
res.status(200).send("user Content.");
})
};