我正在使用multer-s3-transform
将文件上传到 s3,但在上传之前我想调整文件大小,并以两种不同的大小保存。以下是我的代码,没有发生错误,但文件没有上传。
let multer = require("multer-s3-transform");
const aws = require('aws-sdk');
const sharp = require('sharp');
aws.config.update({
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
accessKeyId: process.env.AWS_ACCESS_KEY_ID
);
const s3 = new aws.S3();
var upload = multer({
storage: multerS3({
s3: s3,
bucket: process.env.AWS_BUCKET_NAME,
shouldTransform: function (req, file, cb) {
console.log("hereeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
let originalname = file.originalname;
file.stream.once('data', async function (firstChunk) {
let magic = firstChunk.toString('hex', 0, 4);
let extName = path.extname(originalname).toLowerCase();
// let filename = req.file.fieldname + '-' + Date.now() + path.extname(req.file.originalname);
if (checkMagicNumbers(magic, extName, req)) {
console.log("Valid File***************************");
cb(null, true);
}
});
},
transforms: [{
id: 'original',
key: async function (req, file, cb) {
let basePath = await getDynamicFilePath(req, false);
console.log(basePath, "Path ^^^^^^^^^^^^^^^^^^^^^^^");
let filePath = basePath;
let filename;
if (req.params.container === "resumes") {
void function (req, file, callback) {
filename = Date.now().toString() + '-' + file.originalname;
filePath += "/cropped_" + filename;
}()
} else {
filename = Date.now().toString();
filePath += "/cropped_" + filename;
}
console.log(filePath, "path -------------------");
cb(null, filePath);
},
transform: function (req, file, cb) {
cb(null, sharp().resize(330, 512))
}
}
{
id: 'thumbnail',
key: async function (req, file, cb) {
let basePath = await getDynamicFilePath(req, false);
console.log(basePath, "Path ^^^^^^^^^^^^^^^^^^^^^^^");
let filePath = basePath;
let filename;
if (req.params.container === "resumes") {
void function (req, file, callback) {
filename = Date.now().toString() + '-' + file.originalname;
filePath += "/normal" + filename;
}()
} else {
filename = Date.now().toString();
filePath += "/normal_" + filename;
}
console.log(filePath, "path -------------------");
cb(null, filename);
},
transform: function (req, file, cb) {
cb(null, sharp().resize(1200, 628));
}
}
]
})
}).single("file");
upload(req, res, function (err, filePath) {
console.log(err, "Error");
console.log(filePath, "*************");
});
如果我使用 from ,一切正常multer-s3
,除了图像大小调整,但multer-s3-transform
没有发生错误,并且文件没有上传,并且永远不会进入以下行:
console.log(err, "Error");
console.log(filePath, "*************");
我发现了问题,它在我要检查文件幻数的以下代码块中。
file.stream.once('data', async function (firstChunk) {
let magic = firstChunk.toString('hex', 0, 4);
let extName = path.extname(originalname).toLowerCase();
// let filename = req.file.fieldname + '-' + Date.now() + path.extname(req.file.originalname);
if (checkMagicNumbers(magic, extName, req)) {
console.log("Valid File***************************");
cb(null, true);
}
});
如果我对此发表评论,则一切正常。似乎在获取文件的幻数时,文件被更改为流,并且上传不起作用,将流更改回文件的方法可能会起作用。