我正在使用本地反应,我需要使用Firebase Storage将图像上传到Firebase。我使用react-native-image-picker从手机中选择了图像,该图像为我提供了base64编码数据。
当我尝试将图片上传到Firebase时,它会给我错误Firebase Storage: String does not match format 'base64': Invalid character found
,但我已经检查过该字符串是否是带有正则表达式的有效base64字符串,它是!
我已经从这里读了几个答案,但我尝试了所有这些。这是我的代码:
function uploadImage(image){
const user = getCurrentUser();
const refImage = app.storage().ref(`profileImages/${user.uid}`);
refImage.putString(image, 'base64').then(() => {
console.log('Image uploaded');
});
}
图像选择器:
ImagePicker.showImagePicker(ImageOptions, (response) => {
if (response.didCancel) {
console.log('User cancelled image picker');
}
else if (response.error) {
console.log('ImagePicker Error: ', response.error);
}
else if (response.customButton) {
console.log('User tapped custom button: ', response.customButton);
}
else {
uploadImage(response.data);
}
});
答案 0 :(得分:4)
您需要从图像变量"data:image/jpeg;base64,
中删除此字符串。
需要only data
答案 1 :(得分:4)
如果image
是base64数据网址,您可以使用' data_url'参数和元数据:
function uploadImage(image){
const user = getCurrentUser();
const refImage = app.storage().ref(`profileImages/${user.uid}`);
refImage.putString(image, 'data_url', {contentType:’image/jpg’}).then(() => {
console.log('Image uploaded');
});
}
答案 2 :(得分:3)
image.substring(23)
function uploadImage(image){
const user = getCurrentUser();
const refImage = app.storage().ref(`profileImages/${user.uid}`);
refImage.putString(image.substring(23), 'base64').then(() => {
console.log('Image uploaded');
});
}
答案 3 :(得分:0)
我使用split()。
function uploadImage(image){
const user = getCurrentUser();
const refImage = app.storage().ref(`profileImages/${user.uid}`);
refImage.putString(image.split(',')[1], 'base64').then(() => {
console.log('Image uploaded');
});
}