使用放大存储错误地将图像上载到s3(React Native-Expo-amplify) 我正在尝试使用放大存储API将图像上载到s3 我使用EXPO imagePicker将手机中的图像上传到React Native,图像显示正确 然后我用amplify Storage.put将它上传到s3,它到达s3中的正确文件夹,使用我提供的正确文件名和我提供的公共访问权限(图像和存储桶本身) 但是如果我尝试在s3中打开照片uri,它不会显示。当我检查浏览器时,它在控制台上显示此错误:

使用放大存储错误地将图像上载到s3(React Native-Expo-amplify) 我正在尝试使用放大存储API将图像上载到s3 我使用EXPO imagePicker将手机中的图像上传到React Native,图像显示正确 然后我用amplify Storage.put将它上传到s3,它到达s3中的正确文件夹,使用我提供的正确文件名和我提供的公共访问权限(图像和存储桶本身) 但是如果我尝试在s3中打开照片uri,它不会显示。当我检查浏览器时,它在控制台上显示此错误:,image,react-native,amazon-s3,expo,aws-amplify,Image,React Native,Amazon S3,Expo,Aws Amplify,如果在浏览器中粘贴从Storage.get获取的uri,则会出现以下错误: 我的代码如下(本教程由我自己编写): pickerResult具有以下形式: 我尝试在s3中公开这个桶和照片,但错误依然存在 有什么想法吗 提前谢谢 也许这不是aws amplify的问题,而是fetch和blob的问题。你能试试这个吗 function urlToBlob(url) { return new Promise((resolve, reject) => { var xh

  • 如果在浏览器中粘贴从Storage.get获取的uri,则会出现以下错误:

  • 我的代码如下(本教程由我自己编写):
  • pickerResult具有以下形式:
  • 我尝试在s3中公开这个桶和照片,但错误依然存在
有什么想法吗


提前谢谢

也许这不是aws amplify的问题,而是
fetch
blob
的问题。你能试试这个吗

function urlToBlob(url) {
  return new Promise((resolve, reject) => {
      var xhr = new XMLHttpRequest();
      xhr.onerror = reject;
      xhr.onreadystatechange = () => {
          if (xhr.readyState === 4) {
              resolve(xhr.response);
          }
      };
      xhr.open('GET', url);
      xhr.responseType = 'blob'; // convert type
      xhr.send();
  })
}
而不是

const imageData = await global.fetch(pickerResult.uri)
const blobData = await imageData.blob()
试一试


请查看完整的讨论

您在amazon s3控制台中看到该文件了吗?@Cherniv是的,我看到了。此外,我还将图像直接从我的计算机(正确显示的图像)上传到同一个s3文件夹,它们与存储上传的冲突图像似乎没有区别。Put当我看到错误时,可能是awsserver访问问题。检查套接字或访问权限。@我公开了所有内容(bucket、image),并且iam用户拥有完全权限,因此我认为访问权限不是问题所在。我们使用了另一种解决方案,但在某些手机中上载时仍有问题。只是把它改成了你的解决方案,并且成功了!谢谢谢谢你的提示!
function urlToBlob(url) {
  return new Promise((resolve, reject) => {
      var xhr = new XMLHttpRequest();
      xhr.onerror = reject;
      xhr.onreadystatechange = () => {
          if (xhr.readyState === 4) {
              resolve(xhr.response);
          }
      };
      xhr.open('GET', url);
      xhr.responseType = 'blob'; // convert type
      xhr.send();
  })
}
const imageData = await global.fetch(pickerResult.uri)
const blobData = await imageData.blob()
const blobData = await urlToBlob(pickerResult.uri)