sjn_hoho

sjn_hoho

React Native 使用AWS SDK v3 上传图片报not implemented

问题

因为公司业务包含国外服务,所以需要用到 Aws S3 来存放图片。但因为服务端上传图片,需要经历前端先传到后端,后端再上传 S3,对服务端的性能要求很高,当同时 N 张图片上传 S3 的时候,服务端非常吃内存。所以想要直接前端上传 S3。我们有一个客户端是用 RN 做的,本以为直接使用@aws-sdk/client-s3就可以,因为该 sdk 文档表述是支持 RN 的。但接入后发现报Error not implemented

原因

断点调试并查询了一些资料,发现原因是因为 RN 自己实现了 URL 对象,它的版本中 URL 对象读取 hostname 等属性都会throw new Error('not implemented')对应源码链接 但是在@aws-sdk/client-s3会直接使用 URL 对象来生成对应 region 的 S3 地址。所以就报错了。

解决方案

解决也很简单。只要 RN 环境下引入一个 Url 的 polyfill 就 OK 了。我们使用的是react-native-url-polyfill 用法很简单,然后我们就成功了。