#javascript #android #reactjs #react-native
#javascript #Android #reactjs #react-native
Вопрос:
У меня есть действия redux, которые используются в Интернете. Мы используем эти действия в проекте react native, чтобы мы могли совместно использовать логику между web и native и изменять только компоненты.
Одно из этих действий (загрузка изображения) принимается File
в качестве параметра. Мы выяснили, как получить информацию об изображении в react native — мы используем react-native-image-picker
. Когда пользователь выбирает изображение, он возвращает ответ со всеми данными.
let file = new File([atob(response.data)],
response.fileName,
{type: response.type})
Однако это не работает в react native, в нем нет File
конструктора, который есть в Интернете. Я не могу использовать некоторые альтернативы File
, потому что ожидает redux-действие, которое совместно используется между web и native File
.
Как я могу создать File
в react-native?
Комментарии:
1. Используйте веб-полифилл react-native-fetch-blob .
Ответ №1:
AFAIK, вы не можете создать файл даже в Интернете, более того, если вы попытаетесь получить ключи файлового объекта, Object.keys()
вы ничего не получите, я не знаю, потому что это означает представление файла в браузере, но то, что вы действительно можете использовать Blob
, этоДвоичный объектный файл большого размера, в основном файл в памяти, если вы получаете данные от конечной точки, используйте:
fetch('/endpoint')
.then(res) {
res.blob()
}
.then(blob) {
// Do whatever you want with your blob
}
если нет, вы можете сделать new Blob([response.data], {type: response.type})
Обратите внимание, что у больших двоичных объектов нет имен, вы обработаете это с помощью библиотеки позже
Эта библиотека https://github.com/wkh237/react-native-fetch-blob и документация https://github.com/wkh237/react-native-fetch-blob/wiki/File-System-Access-API может быть полезно
Комментарии:
1. С момента вашего ответа прошло много времени. Теперь вы можете в Chrome / Firefox / Edgium / Opera / Safari! developer.mozilla.org/en-US/docs/Web/API/File/File