如何解决NodeJS API 将图像上传到 S3 不返回响应
我正在尝试使用 NodeJS 将图像上传到 AWS S3 存储桶。我面临的问题是图像正在保存但 API 返回 404(未找到)。这是我的控制器代码:
let arr = [['foo','foo1'],['bar','bar1']];
var a,b,c,d;
[[a,b],[c,d]] = arr;
console.log(a,d); // foo,foo1,bar,bar1
我使用的实用程序类是:
async UploadProfileImage(ctx) {
try {
var file = ctx.request.files.profileImage;
if (file) {
fs.readFile(file.path,(err,fileData) => {
var resp = s3Utility.UploadProfileImageToS3(file.name,fileData);
//Not reaching here. Although E3 tag printing in console.
console.log(resp);
ctx.status = 200;
ctx.body = { response: 'file Uploaded!' };
});
}
else {
ctx.status = 400;
ctx.body = { response: 'File not found!' };
}
} catch (error) {
ctx.status = 500;
ctx.body = { response: 'There was an error. Please try again later!' };
}
}
代码正在 S3 上上传文件,但没有返回正确的响应。在邮递员上测试此端点后,我收到“未找到”消息。但是,我可以看到 E Tag 登录到控制台。我不知道这里出了什么问题。我相信这与承诺有关。有人可以指出或纠正错误吗?
编辑: 使用 async fs.readFile 可以解决问题。
const AWS = require('aws-sdk');
const crypto = require("crypto");
var fs = require('fs');
const mime = require('mime-types');
export class S3Utility {
constructor() { }
async UploadProfileImageToS3(fileName,data) {
let randomId = crypto.randomBytes(16).toString("hex");
AWS.config.update({ region: "Region",accessKeyId: "KeyID",secretAccessKey: "SecretAccessKey" });
var s3 = new AWS.S3();
var imageName = randomId + fileName;
var params = {
Bucket: "BucketName"
Key: imageName,Body: data,ContentType: mime.lookup(fileName)
};
return new Promise((resolve,reject) => {
s3.putObject(params,function (err,data) {
if (err) {
console.log('Error: ',err);
reject(new Error(err.message));
} else {
console.log(data);
resolve({
response: data,uploadedFileName: imageName
});
}
});
});
}
}
const s3Utility: S3Utility = new S3Utility();
export default s3Utility;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。