对于我的react-native
(我使用的是expo)应用程序,我希望用户上传一张个人资料图片,该图片将存储在firebase
存储中。为此,我使用了this example code并将其修改为我的应用程序。然而,这个示例对我不起作用,除非我处于调试模式。
我可以打开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();
}
1条答案
按热度按时间xpcnnkqh1#
我的更新代码