使用放大存储将图像错误地上传到 s3 (React Native - Expo - Amplify)

Image uploaded incorrectly to s3 using amplify Storage (React Native - Expo - Amplify)

  _handleImagePicked = async (pickerResult) => {
    const s3path = 'fotos_cdcc/' + '186620' + '/'
    const imageName = '186620_4' + '.jpeg'
    const key = s3path + imageName
    const fileType = pickerResult.type;
    const access = { level: "public", contentType: 'image/jpg' };
    const imageData = await global.fetch(pickerResult.uri)
    const blobData = await imageData.blob()

    try {
      await Storage.put(
        key, 
        blobData, 
        access,
        fileType
        ).then(result => console.log(result))
    } catch (err) {
      console.log('error: ', err)
    }
  }
Object {
"cancelled": false,
"height": 750,
"type": "image",
"uri": "file:///var/mobile/Containers/Data/Application/021D6288-9E88-4080-8FBF-49F5195C2073/Library/Caches/ExponentExperienceData/%2540anonymous%252Fcaballos-app-dd2fa92e-4625-47e7-940e-1630e824347a/ImagePicker/D9EE1F24-D840-457F-B884-D208FFA56892.jpg",
"width": 748,
}

有什么想法吗?

提前致谢!

也许这不是 aws-amplify 的问题,而是 fetchblob 的问题。你能试试这个吗?

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)

请找到完整的讨论 https://github.com/expo/firebase-storage-upload-example/issues/13