使用PUT预先签名的URL将二进制数据从react-native上传到AWS S3

时间:2017-10-31 16:12:11

标签: amazon-web-services react-native amazon-s3 fetch

我想将文件上传到AWS S3 using a pre-signed url

我尝试使用表单数据发送文件,但是我得到了状态403的以下响应:

  

我们计算的请求签名与您的签名不符   提供。检查您的密钥和签名方法。

经过进一步调查后,我发现AWS S3 does not support form-data并建议使用二进制代码。

我应该如何在本地做反应?

1 个答案:

答案 0 :(得分:0)

事实证明,您可以通过多种方式发送文件,包括insertPetsForUser(User, List<Pet>)base64

使用react-native-fsbuffer

作为base64上传工作,但我无法查看图像。所以我上传了一个缓冲区:

Buffer

请注意,在服务器上,您需要确保设置正确的Content-Type:export const uploadToAws = async (signedRequest, file) => { const base64 = await fs.readFile(file.uri, 'base64') const buffer = Buffer.from(base64, 'base64') return fetch(signedRequest, { method: 'PUT', headers: { 'Content-Type': 'image/jpeg; charset=utf-8', 'x-amz-acl': 'public-read', }, body: buffer, }) } ,因为看起来fetch会将charset添加到Content-Type。