не удалось выполнить «readAsText» для «FileReader»: параметр 1 не имеет типа «Blob»

У меня возникли ошибки при выполнении «readAsText» в «FileReader»: параметр 1 не имеет типа «Blob». Моя библиотека версии 0.10.8. Я попытался понизить React Native Fetch Blob до 0.9.5, но получил еще одну ошибку.

слушатели не определены

я читал проблему на github, но я не очень понимаю их решения, которые я сейчас запутал.

const Blob = RNFetchBlob.polyfill.Blob

const fs = RNFetchBlob.fs

window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest

window.Blob = Blob

​

const screenWidth = Dimensions.get('window').width

​

const uploadImage = (uri, imageName, mime = 'image/jpg') => {

return new Promise((resolve, reject) => {

const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri

let uploadBlob = null

const imageRef = firebaseApp.storage().ref('posts').child(imageName)

fs.readFile(uploadUri, 'base64')

.then((data) => {

return Blob.build(data, { type: `${mime};BASE64` })

})

.then((blob) => {

uploadBlob = blob

return imageRef.put(blob, { contentType: mime })

})

.then(() => {

uploadBlob.close()

return imageRef.getDownloadURL()

})

.then((url) => {

resolve(url)

})

.catch((error) => {

reject(error)

})

})

}

person user8784065    schedule 20.10.2017    source источник
comment
Что такое Blob.build()?   -  person guest271314    schedule 20.10.2017
comment
А где делается звонок на FileReader#readAsText? @guest271314 @guest271314 они объявляют Blob как polyfill в верхней части блока кода (было вне форматирования блока кода)   -  person Kaiido    schedule 20.10.2017
comment
Я только учусь у своих друзей github, сэр, но его проект работает нормально. но я получил ошибки. Что здесь не так, сэр? я не понимаю об этом   -  person user8784065    schedule 20.10.2017


Ответы (1)


Я решил это, сбросив window.XMLHttpRequest в исходное состояние после того, как закончил использовать BLOB-объект выборки для загрузки моего изображения в облако. Надеюсь, поможет :)

const Blob = FetchBlob.polyfill.Blob;
// Keep an original copy of window.XMLHttpRequest before set it to FetchBlob.polyfill.XMLHttpRequest
const oriWindowXMLHttpRequest = window.XMLHttpRequest;
window.XMLHttpRequest = FetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;

return new Promise((resolve, reject) => {
  Blob.build(imageFile, {
      type: mime
    })
    .then(blob => {
      uploadBlob = blob;
      return imageRef.put(blob, {
        contentType: mime
      });
    })
    .then(() => {
      uploadBlob.close();
      return imageRef.getDownloadURL();
    })
    .then(url => {
      // Reset it to the original WindowXMLHttpRequest after the task has been done completely
      window.XMLHttpRequest = oriWindowXMLHttpRequest;
      resolve(getSuccessResponse(url));
    })
    .catch(error => {
      // Reset it to the original WindowXMLHttpRequest after the task has been done completely
      window.XMLHttpRequest = oriWindowXMLHttpRequest;
      showToast(getErrorMessage(error));
      reject(getFailResponse(error));
    });
});

person Jaz    schedule 13.11.2018