Express 上传到s3后如何返回文件位置
我不熟悉Node.js和express 我使用以下函数将图像上传到s3Express 上传到s3后如何返回文件位置,express,amazon-s3,sharp,Express,Amazon S3,Sharp,我不熟悉Node.js和express 我使用以下函数将图像上传到s3 function defaultContentType(req, file, cb) { setImmediate(function () { var ct = file.contentType || file.mimetype || 'application/octet-stream' cb(null, ct); }); } module.exports = asy
function defaultContentType(req, file, cb) {
setImmediate(function () {
var ct = file.contentType || file.mimetype || 'application/octet-stream'
cb(null, ct);
});
}
module.exports = async function (fileName, file) {
aws.config.update({
secretAccessKey: process.env.AWSSecretKey,
accessKeyId: process.env.AWSAccessKeyId,
contentType: defaultContentType,
});
var s3bucket = new aws.S3({
params: {
Bucket: process.env.S3_Bucket_Name,
}
});
var params = {
Key: fileName,
Body: file
};
var fileData = await s3bucket.upload(params, function (err, data) {
if (err) {
throw err;
} else {
return data;
}
});
return fileData;
}
在上传图像之前,我使用
request(req.file.location, async function (err, response, body) {
var fileInstance = await sharp(body);
var resizeFile = await fileInstance.resize({
height: 150,
fit: 'inside'
});
var data = await s3Upload('mobile_' + req.file.key, resizeFile);
req.mobile = data.Location;
next();
});
我的问题是;
图像确实会被调整大小并保存到s3
但“s3Upload”函数不返回文件位置
看来完成这个手术需要一些时间。在它完成之前,未定义的值get return
有人能提出一个解决这个问题的方法吗
改进方法
module.exports = function (fileName, file, finishCallback) {
// more code
s3bucket.upload(params, function (err, data) {
if (err) {
throw err;
} else {
finishCallback(data);
}
});
}
将上载方法修改为
s3Upload('mobile_' + req.file.key, resizeFile, (data) => {
req.mobile = data.Location;
next();
});
这似乎是预期的工作。
我不确定这是正确的做事方式。
有没有正确的方法?根据
数据。Location
应该返回URL我知道,您正在将async await与Callbacks混合将uploadfunction更改为thisvar fileData=wait s3bucket.upload(params).promise()
尝试遵循此操作,或者您可以从回调手动创建一个承诺,也许这能帮到你