amazon-s3 - 如何使用 React Native 发布或放置原始二进制文件

标签 amazon-s3 react-native fetch-api

我需要将图像文件从 React Native 应用程序放入预配置的 s3 上传 URL。我看到了一个 fetch 的示例,它通过路径将图像作为二进制文件上传,但它是以多部分表单上传的方式进行的。因为 s3 上传 url 只能将其作为正文中的原始二进制文件 - 而不是多部分的内容类型,所以使用 fetch 或 React Native 中的任何其他库将原始二进制图像作为正文的语法是什么?

以下代码将其作为表单数据上传 - 这不是我想要做的。

          var photo = {
            uri: response.uri,
            name: fileName,
          };
          const body = new FormData();  // how can I do this not as a form?
          body.append('photo', photo);
          const results = await fetch('https://somes3uploadurl.com, {
            method: 'PUT',
            body,
          });

最佳答案

事实证明,您可以通过多种方式发送文件,包括 base64 和作为 Buffer

使用react-native-fsbuffer :

以 base64 格式上传可以正常工作,但图像不知何故损坏了。所以我使用缓冲区上传:

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,
  })
}

请注意,在服务器上,您需要确保设置正确的 Content-Type: { ContentType: "image/jpeg; charset=utf-8", 'x-amz-acl': ' public-read' } 因为 fetch 似乎将字符集添加到 Content-Type 中。

关于amazon-s3 - 如何使用 React Native 发布或放置原始二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42974386/

相关文章:

javascript - 从 php 文件中获取 api (GET DATA)

c#-4.0 - 使用 C# 和 .Net SDK 将 AWS S3 MultiPart 上传到命名目录

upload - Dropbox 如何将数据上传到其服务器?

memcached - 我该如何修复我的 S3/memcache 延迟问题?

react-native - React Native 构建错误 : Text must not be null or empty

javascript - 如何从 fetch 调用获取对变量的 api 响应

java - 如何在 Java 中直接将字符串写入 S3?

react-native - 获取当前屏幕?

android - react native 自定义字体

typescript - 为什么在解构响应对象后引发 "Failed to execute ' json' on 'Response'"错误