盒子
盒子

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
用法很简单,然后我们就成功了。