В поисках решения этой проблемы я наткнулся на этот пост . Объяснение довольно тщательное. Вот TL; DR. , .
Начиная с 0,57 RN, для полифилла, который они используют для выборки, значение xhr.responseType по умолчанию больше не равно blob
. React Native для Android BlobModule проверяет тип ответа, чтобы определить, может ли он обрабатывать URL-адрес, если это не запрос http или https. Поскольку responseType никогда не равен 'blob'
, этот модуль никогда не обрабатывает запрос, и выдается ошибка типа. , , на андроид. , , для файловых запросов. , , через полифилл whatwg-fetch.js . , , для RN 0,57 +.
Основываясь на вышеупомянутом посте по проблеме выставки, я добавил это как (надеюсь) временное решение.
requestBlob = (uri) => {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.onload = () => resolve(xhr.response);
xhr.onerror = () => reject(new TypeError('Network request failed'));
xhr.responseType = 'blob';
xhr.open('GET', uri, true);
xhr.send(null);
});
}
Я сохраняю свое изображение так:
let body, storedImage;
try {
body = await requestBlob(localImageUri).catch(error => errors.push(error));
storedImage = await Storage.put(path, body).catch(error => errors.push(error));
} finally {
body.close();
}