如何解决使用fileS缓冲区上传到s3
我正在尝试使用批量文件上传到s3。
以某种方式,如果我使用回调上传,它将可以正常工作,但是我想将所有返回数据推入数组,然后再执行一些操作。但这是行不通的。
我在网上看时,看到诸如使用async await
或recurssive
之类的答案有效,但仍然无法正常工作。我什至尝试使用reduce
,但也没有运气
我的reduce
return files.reduce((accumulator,current) => {
const {path,buffer} = current;
const s3 = new AWS.S3();
// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
s3.putObject(awsS3sdkParams(path,buffer),function ( err,data ) {
const { protocol,host } = this.request.httpRequest.endpoint;
data.params = this.request.params;
data.params.url = `${protocol}//${host}/${data.params.Key}`;
return [...accumulator,data];
});
},[]);
使用递归的示例
const result = [];
const helper = (files) => {
const {path,buffer} = files[0];
const s3 = new AWS.S3();
// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
s3.putObject(UploadService.awsS3sdkParams(path,function (err,data){
const { protocol,host } = this.request.httpRequest.endpoint;
data.params = this.request.params;
data.params.url = `${protocol}//${host}/${data.params.Key}`;
UtilsService.clDebug(data,'data');
result.push(data);
files.shift();
if(files.length > 0) return helper(files);
});
};
helper(files);
return results;
使用承诺的示例
const result = [];
for(let {path,buffer} of files){
const s3 = new AWS.S3();
s3.putObject(awsS3sdkParams(path,buffer)).promise()
.then(file => {
result.push(file);
})
.catch(err => {
console.log(err,'errs');
});
}
我几乎可以理解为什么结果总是为[]
,但是如何使结果起作用?
我无法使用异步等待的原因是因为我尝试过,但是以某种方式将文件上载了不良数据后,我什至无法打开文件,或者键是相同的...
有人有其他建议吗?
提前感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。