Для моего приложения react-native
(я использую expo) я хочу, чтобы пользователи загружали изображение профиля, которое будет храниться в firebase
хранилище.Для этого я использовал этот пример кода и изменил его для своего приложения.Однако этот пример не работает для меня, если я не в режиме отладки.
Я могу открыть ImagePicker и затем отредактировать фотографию, но загрузка не удалась.
Я опубликовал снимоккода.При нажатии кнопки вызывается _pickImage()
.
Что может быть причиной этой проблемы?Мое предложение состоит в том, что в режиме отладки у приложения есть больше времени для обработки функции, потому что в режиме отладки приложение действительно запаздывает.
Я очень плохо знаком с react-native
(и разработка приложений вВообще), заранее прошу прощения за это!
Большое спасибо.
_pickImage = async () => {
let pickerResult = await ImagePicker.launchImageLibraryAsync({
allowsEditing: true,
aspect: [4, 3],
});
this._handleImagePicked(pickerResult);
};
_handleImagePicked = async pickerResult => {
try {
this.setState({ uploading: true });
if (!pickerResult.cancelled) {
uploadUrl = await uploadImageAsync(pickerResult.uri);
this.setState({ image: uploadUrl });
}
} catch (e) {
console.log(e);
alert('Upload failed, sorry :(');
} finally {
this.setState({ uploading: false });
}
};
}
async function uploadImageAsync(uri) {
// Why are we using XMLHttpRequest? See:
// https://github.com/expo/expo/issues/2402#issuecomment-443726662
const blob = await new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = function() {
resolve(xhr.response);
};
xhr.onerror = function(e) {
console.log(e);
reject(new TypeError('Network request failed'));
};
xhr.responseType = 'blob';
xhr.open('GET', uri, true);
xhr.send(null);
});
const ref = firebase
.storage()
.ref()
.child(uuid.v4());
const snapshot = await ref.put(blob);
// We're done with the blob, close and release it
blob.close();
return await snapshot.ref.getDownloadURL();
}