使用React+Express上传图片到AWS S3时PUT请求报错如何解决
问题原因及排查方案
- 生成预签名URL时的S3基础配置错误:这是最常见的原因,生成PUT预签名URL时如果桶名拼写错误、S3区域配置错误、使用了不存在的S3端点,都会导致最终生成的URL对应的域名本身不存在,触发域名解析失败报错。你可以先把后端返回的
putUrl打印出来,手动校验域名部分是否符合AWS S3的域名规则,正常格式为{桶名}.s3.{区域}.amazonaws.com,如果和这个格式不符就是生成阶段配置错了。 - 前端请求时额外添加了params参数篡改了请求URL:你当前的axios配置里给PUT请求额外加了
params字段,而预签名URL本身已经把Key、ContentType、签名参数等所有必要信息编码在了URL中,额外添加的查询参数会直接改变请求地址,导致最终请求的不是S3的合法地址。发送PUT请求到预签名URL时,不需要加任何params,只要保证headers里的Content-Type和你生成预签名URL时传入的ContentType完全一致即可。 - 网络环境无法解析对应S3域名:如果你用了S3私有访问端点、自定义域名,或者当前网络的DNS服务有故障,也会出现解析失败的问题,你可以先清理本地DNS缓存,或者把生成的
putUrl复制到浏览器地址栏访问,验证域名是否可以正常解析。 - 预签名URL拼接错误:如果后端返回
putUrl时不小心拼接了额外的前缀(比如误加了本地Express服务的地址前缀),也会导致请求地址错误。
内容的提问来源于stack exchange,提问作者Jeewantha Lahiru
相关产品推荐
相关产品推荐

