Я отправляю мой код, так как это было немного неприятно для меня:
Чтобы загрузить изображения в firebase. вам необходимо загрузить изображения в виде Blobs. Если вы не знаете, что такое капли, не беспокойтесь.
Шаг 1.
npm install --save react-native-fetch-blob
Шаг 2.
// copy and paste this code where you will handle the file upload
import RNFetchBlob from 'react-native-fetch-blob'
const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;
Шаг 3.
// The uploadImage function that you are going to use:
function uploadImage(uri, mime = 'image/jpeg', name) {
return new Promise((resolve, reject) => {
let imgUri = uri; let uploadBlob = null;
const uploadUri = Platform.OS === 'ios' ? imgUri.replace('file://', '') : imgUri;
const { currentUser } = firebase.auth();
const imageRef = firebase.storage().ref(`/jobs/${currentUser.uid}`)
fs.readFile(uploadUri, 'base64')
.then(data => {
return Blob.build(data, { type: `${mime};BASE64` });
})
.then(blob => {
uploadBlob = blob;
return imageRef.put(blob, { contentType: mime, name: name });
})
.then(() => {
uploadBlob.close()
return imageRef.getDownloadURL();
})
.then(url => {
resolve(url);
})
.catch(error => {
reject(error)
})
})
}
Итак, как вы называете эту функцию? Передайте URI изображения в качестве первого аргумента, так как второй аргумент можно передать 'image/jpeg'
, а последним аргументом является имя изображения. Выберите имя, которое вам нравится.
Но Уолтер У меня есть несколько изображений и вы хотите их загрузить и хотите правильно загружать. Что делать, если одна загрузка удалась, а другая - нет?
ли это тогда:
let imgPromises = [];
imgPromises.push(uploadImage(img1, 'image/jpeg', 'imageOne'));
imgPromises.push(uploadImage(img2, 'image/jpeg', 'imageTwo'));
imgPromises.push(uploadImage(img3, 'image/jpeg', 'imageOne'));
Promise.all(imgPromises).then(urls => {
// ALL IMAGES SUCCEEDED and you will get an array of URIS that you can save to your database for later use!
}).catch(error => {
// One OR many images failed the upload. Give feedback to someone.
})
Спасибо! Этот пример был очень полезен! –
эй, blob не работает в EXPO. Есть ли другой путь? – chazefate
Не использовать EXPO, это единственный способ, возможно,? Я думаю, что EXPO ограничена в этой части. Удивление, если у них есть библиотека, которая поможет нам в этом. Если нет, просто не используйте его. –