2016-09-02 5 views
1

Я вижу много разговоров о загрузке в хранилище Firebase от React Native, но все, похоже, как обойти тот факт, что React Native не поддерживает Blobs или Files. Но Firebase имеет метод putString для загрузки файлов с кодировкой base64.Загрузить в Firebase Storage from React Native

Почему этот код, например, работать в браузере, но не в React Native:

var base64String = "iVBORw0KGgoAAAA..."; 
firebase 
    .storage() 
    .ref() 
    .child(`test/test.png`) 
    .putString(base64String, 'base64') 
    .then(function(snapshot) { 
    console.log('Uploaded a base64 string!'); 
    }) 
    .catch(function(err) { 
    console.log('Problems', err); 
    }); 

Нет ошибок приведены в React Native, но файл не прибудет в Firebase. Что дает?

+1

Учитывая, что 'putString()' thennable, вероятно, также определяет 'catch()', который вызывается при наличии ошибок: '.putString (base64String, 'base64') . Then (function (snapshot) { console.log ('Загружен base64 string!'); }). Catch (функция (ошибка) {console.error (ошибка);}); ' –

+0

Да. Пробовал это. Кажется, что ошибка не выбрасывается. – nicholas

+0

Это хороший момент. Я добавил уловку к примеру. Даже с ним ничего не записывается на консоль. – nicholas

ответ

3

Firebase Storage JS dev здесь.

Чтобы быть ясным, на момент написания статьи (2 сентября 2016 г.) Пожарные загрузки Хранилище не поддерживается в React Native.

Чтобы ответить на ваш вопрос о том, почему загрузки работать в браузере, но не Реагировать Native: наш метод putString() не нужна поддержка Blob, но если вы передаете в строку base64 наша библиотека все еще должен быть в состоянии для отправки двоичных данных.

В современном браузере вы можете хранить двоичные данные в ArrayBuffer и отправлять его как тело запроса XMLHttpRequest или Fetch - не так в React Native.

Насколько мы можем судить, базовые библиотеки React Native в настоящее время не предоставляют хороший способ отправки двоичных данных в памяти в виде тела HTTP-запроса.

+0

Это также применимо при использовании https://github.com/wkh237/react-native-fetch-blob и полифинга XMLHTTPRequest, например, так: 'window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest'? edit: context: https://github.com/wkh237/rn-firebase-storage-upload-sample/blob/master/index.common.js – pmilla1606

+0

response-native-fetch-blob - это сторонняя библиотека, поэтому мы официально не поддерживают его. По моим наблюдениям, похоже, что некоторые люди добиваются успеха с помощью реакции-native-fetch-blob (поэтому мы стараемся не прерывать его), но были ошибки, связанные с новыми версиями Firebase, например https://github.com/wkh237/реагировать-нативную выборку-клякса/толкай/194. Поскольку мы не публикуем/не контролируем реакцию-native-fetch-blob, мы не можем гарантировать одинаковый уровень реагирования на запросы поддержки, отчеты об ошибках и т. Д., Связанные с этим. – sphippen

+1

@sphippen Знаете ли вы о проблеме или какой-то способ отслеживать, когда это будет поддерживаться в React Native? – Eric

Смежные вопросы