You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从AWS S3上传返回的ManagedUpload对象中获取文件URL?

问题解决方法

核心问题分析

  1. uploadFile函数同时混用了回调函数和await,导致返回的仍是ManagedUpload对象,而非上传完成后的data结果。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:06:33