我正在收到来自FE到Typescript中我的BE代码的发布请求,我想将FE中从BE发送到BE的文件上传到AWS S3存储桶中。
这是我正在使用的代码:
import S3 from 'aws-sdk/clients/s3';
import aws from 'aws-sdk';
import fs from 'fs';
async writeDataset(datasetFile: any): Promise<boolean> {
const FOLDER = 'sample';
const BUCKET = 'sample-bkt';
const bucket = new S3();
const credentials = new aws.SharedIniFileCredentials({
profile: 'test-dev'
});
bucket.config.credentials = credentials;
bucket.config.region = 'us-east-1';
fs.readFile(datasetFile.path, function(err, data) {
const params = {
Bucket: BUCKET,
Key: FOLDER + datasetFile.originalname,
Body: data,
ACL: 'private'
};
bucket.upload(params, function() {
fs.unlink(datasetFile.path, function() {
if (err) {
console.error(err);
}
});
if (err) {
return false;
} else {
console.log('Successfully uploaded data');
return true;
}
});
});
}
由于我使用Postman(模拟FE调用),并且在ob中具有文件的路径字段datasetFile.path
,因此上载的效果非常好,这就是fs.readFile(datasetFile.path, function(err, data) { ... }
的原因,因为该文件是通过邮递员从本地PC上传的。
我要做的是能够从内存中将文件从request.files上传到S3,而无需使用fs.readFile
和datasetFile.path