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

JS AWS S3 SDK调用getSignedURL返回undefined 无法获取S3预签名URL

问题修正方案

你的代码存在以下几处核心错误,按优先级修复即可正常运行:

  • 异步逻辑处理错误:generatePreSignedGetUrl返回值是Promise对象,你用同步方式直接赋值无法拿到真实URL,需要通过async/await或者then方法获取异步结果
  • 配置未关联实例:你单独创建的awsConfig对象没有传入S3构造函数,同时重复声明了awsBucket变量,无用的空实例覆盖逻辑会导致配置失效
  • 初始化语法错误:$(document).ready()需要传入函数引用,你写的initialise()是直接执行函数,且initialise函数末尾多了不匹配的错误回调括号,属于语法错误
  • 参数冗余:getObject场景生成预签名URL不需要传ContentType参数,该参数仅用于上传类预签名URL生成

另外你写的区域eu-west-2是正确的,对应AWS伦敦区域。

安全提示

绝对不要在前端生产环境代码中硬编码AWS访问密钥,所有访问你页面的用户都可以直接拿到密钥,获得你S3存储桶的完全操作权限,正规实现应该是后端服务生成预签名URL后提供给前端调用,以下修正仅适用于本地临时测试场景。

修正后的JS代码

var awsAccessKeyID = 'my-access-key';
var awsSecretAccessKey = 'my-secret-key';
var awsBucketName = 'bucket-name';
const URL_EXPIRATION_TIME = 60; // 单位:秒
var awsRegion = 'eu-west-2';

// 修正初始化写法,传入函数引用而非直接执行
$(document).ready(initialise);

// 页面初始化函数,修复语法错误
function initialise() {
  console.log('Test');
  // 绑定刷新按钮点击事件
  $("#refreshImageButton").click(function() {
    let imagePath = '1.jpg';
    refreshImage(imagePath);
  });
}

// 图片刷新函数,新增async关键字支持await
async function refreshImage(imagePath){
  console.log(`Image path: ${imagePath}`);
  // 等待Promise返回真实预签名URL
  let preSignedURL = await generatePreSignedGetUrl(imagePath);
  console.log(preSignedURL);
  $("#displayImage").attr("src", preSignedURL);
}

// 预签名URL生成函数,修正配置关联逻辑
function generatePreSignedGetUrl(fileName) {
  return new Promise(function(resolve, reject){
    // 初始化S3实例时直接传入所有配置,不需要单独创建AWS.Config
    const awsBucket = new AWS.S3({
      accessKeyId: awsAccessKeyID,
      secretAccessKey: awsSecretAccessKey,
      region: awsRegion,
      params: { Bucket: awsBucketName }
    });
    awsBucket.getSignedUrl('getObject', {
      Key: fileName,
      Expires: URL_EXPIRATION_TIME
    }, (err, url) => {
      if (err) {
        console.error('生成预签名URL失败:', err);
        reject(err);
        return;
      }
      resolve(url);
    });
  });
}

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 10:45:03