如何从AWS S3上传返回的ManagedUpload对象中获取文件URL?
问题解决方法
核心问题分析
uploadFile函数同时混用了回调函数和await,导致返回的仍是ManagedUpload对象,而非上传完成后的data结果。myfunction调用异步函数uploadFile时未用await或.then()处理,直接赋值拿到的是Promise实例,不是最终的文件URL。
修正后的代码
第一步:修复uploadFile函数
移除回调,直接通过await获取upload操作的Promise结果,返回包含文件URL的data.Location:
async uploadFile(file, fileName) { // S3 is from --> import * as S3 from 'aws-sdk/clients/s3'; const s3 = new S3({ accessKeyId: 'myaccesskeyid', secretAccessKey: 'mysecretaccesskey', region: 'us-east-1' }); const params = { Bucket: 'my-bucket', Key: 'MyDirectory/' + fileName, Body: file }; // 调用.promise()将ManagedUpload转为Promise,用await获取结果 const data = await s3.upload(params).promise(); return data.Location; // 直接返回S3文件URL }
第二步:修复myfunction的调用
将myfunction改为异步函数,用await获取uploadFile的返回值:
async myfunction(){ let file; // assume the file is already set let filename; // assume the filename is already set // 用await等待异步操作完成,拿到正确的URL let s3URL = await uploadFile(file, filename); console.log(s3URL); makeAPIRequest(s3URL); }
额外说明
s3.upload()返回的ManagedUpload对象,必须调用.promise()方法转换为Promise,才能配合await获取最终结果。- 如果环境不支持顶级
await,调用myfunction时需处理异步逻辑:
// 用.catch捕获可能的错误 myfunction().catch(err => console.error(err));
内容的提问来源于stack exchange,提问作者rfgonzalezweb
相关产品推荐
相关产品推荐

