React Native + Amplify S3 示例

React Native + Amplify S3 Example

我正在寻找一个完整的示例,说明如何在成功将文件名发送到 S3 后 return。

目前我有类似的东西:

uploadImageAsync = async (pickerResult) => {
    try {
      this.setState({
        uploading: true,
      })

      if (!pickerResult.cancelled) {
        const response = await fetch(pickerResult.uri);
        const blob = await response.blob();
        Storage.put(fileName, blob)
          .then(result => console.log(result))
          .catch(err => console.log(err))
      }
    } finally {
      this.setState({
        uploading: false,
      })
    }
  }

我的 return 结果是我创建的文件名。创建后,我想 return S3 文件名。这可能吗?

因此您实际上不需要在执行放置后将 S3 文件的密钥返回给您,因为它始终具有基于您提供给 "put" 的第三个参数的可预测密钥。

  • Public level/omitted 第三个参数:"public/yourFileName"
  • 保护级别/{级别:'protected'}:"protected/IdentityId/fileName"
  • 私人级别/{级别:'private'}:"private/IdentityId/fileName"

put 函数会自动为您的文件名添加前缀。但是,如果您出于任何原因需要它,您可以获得这样的 "IdentityId" 部分:

Auth.currentCredentials().then(user => user.identityId)

您可以对图像执行 get() 调用以获得签名 url。

Storage.put('profile-picture.jpeg', blob)
  .then(result => {
    Storage.get('profile-picture.jpeg')
      .then(result => {
        console.log(result);                    
      })
      .catch(err => {
        console.error(err);
      });
  })
  .catch(err => {
    console.error(err);
  });