Node.js Express对接Amazon S3上传图片后获取预签名URL报错如何解决
报错解决方案
你出现该报错的核心原因是调用s3.getSignedUrlPromise时传入的操作类型参数错误:AWS SDK v2 中用于获取S3对象的标准操作标识为getObject,你填写的getImage不属于S3的合法操作类型,触发了SDK内部参数校验的异常。
你已经验证s3.getObject可正常获取对象,说明S3实例初始化、权限配置、存储桶名、对象key均无问题,仅需修改操作标识参数即可解决问题。
修正后的代码示例如下:
// 写法1:仅使用await(推荐) try { const url = await s3.getSignedUrlPromise('getObject', { Bucket: BUCKET_NAME, Key: recordKey, Expires: 60 }); console.log(url); } catch (err) { console.log(err); }
// 写法2:仅使用.then/.catch(无需配合await) s3.getSignedUrlPromise('getObject', { Bucket: BUCKET_NAME, Key: recordKey, Expires: 60 }).then(function(url) { console.log(url); }).catch(function(err) { console.log(err); });
补充说明:你原有代码中同时混用await和.then的写法会导致最终打印的url变量为undefined,因为await会等待Promise执行完成,但.then的返回值没有被正确捕获,建议统一使用其中一种异步处理写法即可。
内容的提问来源于stack exchange,提问作者Cameron Davis
相关产品推荐
相关产品推荐

