我正在开发一项功能,允许用户使用nodejs将图像上传到mongodb:
我的问题:
从用户的请求中获取图像文件并执行2个任务:例如,将当前图像存储到具有集合名称“ Origin_image”的mongodb中,并调整当前图像的大小并存储到具有集合名称“ Thumbnail_image”的mongodb中
到目前为止,我的解决方案:
我只使用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 :(得分:0)
如果您在前端使用Angular,请让最终用户处理图像大小调整,以便您的服务器不必处理开销。我目前正在使用ng2-img-max调整图像大小。您可以在文件更改时启动调整大小。
我也想先创建缩略图,然后再创建原始缩略图,但这在调整大小和在调整大小之前又造成了巨大的问题,因为在GridFs对其进行任何操作之前,它们如何存储它们,剩下的就是响应。因此,节省一些时间。仅调整一次大小,直到达到用户的限制大小,然后再显示缩略图,将sharp与自定义查询参数一起使用即可显示所需的大小。
祝你好运,编码愉快。