Amplify配置的AWS S3调用put上传public目录报SignatureDoesNotMatch求助
Amplify S3 存储上传SignatureDoesNotMatch错误解决方法
核心错误原因
你当前的Storage.put调用参数顺序错误,Amplify Storage类的put方法第一个入参为S3桶内的目标存储路径,第二个入参才是待上传的文件对象。你将文件对象作为第一个参数传入,导致AWS签名生成逻辑使用了非法路径,最终触发签名不匹配错误。
解决步骤
1. 修正上传代码写法
要指定上传到public目录,直接将public前缀拼在第一个参数的路径中即可,参考代码:
// 可自定义文件名,避免重复覆盖 const fileName = `public/${Date.now()}_${imgsPreview[0].name}` const uploadedImage = await Storage.put( fileName, imgsPreview[0].img, { contentType: imgsPreview[0].type // 可选,指定正确的文件MIME类型 } )
Amplify默认权限配置下,public/前缀的路径对所有用户开放读权限,登录用户默认拥有写权限,无需额外配置路径前缀权限。
2. 验证Amplify存储配置
修改代码后仍报错的话,依次检查以下配置:
- 确认项目根目录下
amplifyconfiguration.json中storage配置的bucket名称、region参数和你实际使用的S3桶信息完全匹配 - 进入AWS Amplify控制台对应项目的存储管理页,确认你使用的用户身份(未登录/已登录)对应的权限组勾选了「创建和更新」权限,若仅开放了读权限会触发写操作鉴权失败
3. 检查S3桶策略(仅手动修改过桶策略时需要)
如果你曾手动修改过Amplify自动生成的S3桶策略,确认桶策略中没有禁止相应用户角色写入public/前缀路径的规则,Amplify默认生成的桶策略无需手动修改即可支持public目录读写。
内容的提问来源于stack exchange,提问作者Katherine Pacheco
相关产品推荐
相关产品推荐

