在使用 multer-s3-transform 上传到 s3 之前用 imagemin 转换照片
Transform photo with imagemin before uploading to s3 using multer-s3-transform
我试图使用 multer-s3-transform 将我的照片上传到 s3,但在此之前我需要使用 imagemin 将图像转换为更小的文件大小。我可以使用 sharp 来完成,但仍然想使用 imagemin 来专门设置质量。
这是我用sharp做的。我需要找到一种使用 imagemin
的方法
const multerS3Obj = multerS3({
s3 : s3,
bucket : config.amazon.s3.bucketName,
acl : "public-read",
contentType : multerS3.AUTO_CONTENT_TYPE,
metadata : function(req, file, cb) {
const metadataObj = Object.assign({}, req.body);
metadataObj.content_type = file.mimetype;
metadataObj.filename = file.originalname;
cb(null, metadataObj);
},
shouldTransform: function(req, file, cb) {
cb(null, /^image/i.test(file.mimetype));
},
transforms: [
{
key: function(req, file, cb) {
const refType = req.params.refType,
refId = req.params.refId,
subfolder = `uploads/${refType}/${refId}/`;
cb(null, subfolder + file.originalname);
},
transform: function(req, file, cb) {
cb(null, sharp().resize(null,null));
}
}
]
});
这是我使用 imagemin 所做的,但没有用
const buff = async (image, path) => {
const files = await imagemin([image], path, {
plugins : [
imageminJpegtran(),
imageminPngquant({quality: '65-80'})
]
})
}
这是第一个代码中的转换部分
transform: async function(req, file, cb) {
const files = await buff(file.originalname, 'location')
cb(null, sharp().resize(null,null));
}
我不断收到错误消息:uncaughtException:dest.on 不是函数
我能够解决它。而不是使用imagemin设置图像质量发现sharp支持设置图像质量
let quality = ''
if (file.mimetype === 'image/jpeg') {
quality = sharp().jpeg({quality: 50})
} else if (file.mimetype === 'image/png') {
quality = sharp().png({quality: 50})
}
我试图使用 multer-s3-transform 将我的照片上传到 s3,但在此之前我需要使用 imagemin 将图像转换为更小的文件大小。我可以使用 sharp 来完成,但仍然想使用 imagemin 来专门设置质量。
这是我用sharp做的。我需要找到一种使用 imagemin
的方法const multerS3Obj = multerS3({
s3 : s3,
bucket : config.amazon.s3.bucketName,
acl : "public-read",
contentType : multerS3.AUTO_CONTENT_TYPE,
metadata : function(req, file, cb) {
const metadataObj = Object.assign({}, req.body);
metadataObj.content_type = file.mimetype;
metadataObj.filename = file.originalname;
cb(null, metadataObj);
},
shouldTransform: function(req, file, cb) {
cb(null, /^image/i.test(file.mimetype));
},
transforms: [
{
key: function(req, file, cb) {
const refType = req.params.refType,
refId = req.params.refId,
subfolder = `uploads/${refType}/${refId}/`;
cb(null, subfolder + file.originalname);
},
transform: function(req, file, cb) {
cb(null, sharp().resize(null,null));
}
}
]
});
这是我使用 imagemin 所做的,但没有用
const buff = async (image, path) => {
const files = await imagemin([image], path, {
plugins : [
imageminJpegtran(),
imageminPngquant({quality: '65-80'})
]
})
}
这是第一个代码中的转换部分
transform: async function(req, file, cb) {
const files = await buff(file.originalname, 'location')
cb(null, sharp().resize(null,null));
}
我不断收到错误消息:uncaughtException:dest.on 不是函数
我能够解决它。而不是使用imagemin设置图像质量发现sharp支持设置图像质量
let quality = ''
if (file.mimetype === 'image/jpeg') {
quality = sharp().jpeg({quality: 50})
} else if (file.mimetype === 'image/png') {
quality = sharp().png({quality: 50})
}