#javascript #react-native #google-cloud-firestore #google-cloud-storage #firebase-storage
#javascript #react-native #google-облако-firestore #google-облачное хранилище #firebase-хранилище
Вопрос:
я пытаюсь загрузить изображение с устройства в хранилище firebase, но я не знаю, какой формат мне следует использовать. я пробовал с помощью put и putString, но оба они дали мне недопустимый аргумент.
Это код для выбора и загрузки изображения.
const pickImage = async () => {
let result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.All,
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
if (!result.cancelled) {
setImage(result.uri);
}
};
const uploadImage = async () => {
if (!image) {
Alert.alert(
'You have to choose an image first'
);
} else {
const uri = image;
console.log(uri);
const filename = uri.substring(uri.lastIndexOf('/') 1);
const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri;
setUploading(true);
setTransferred(0);
const task = firebase.storage()
.ref(filename)
.put(uploadUri);
// set progress state
task.on('state_changed', snapshot => {
setTransferred(
Math.round(snapshot.bytesTransferred / snapshot.totalBytes) * 10000
);
});
try {
await task;
} catch (e) {
console.error(e);
}
setUploading(false);
Alert.alert(
'Photo uploaded!',
'Your photo has been uploaded to Firebase Cloud Storage!'
);
setImage(null);
}
};
Это uri изображения (консоль.вывод журнала) :
Это ошибка при использовании .put(uploadUri):
Это ошибка при использовании .putString(uploadUri, ‘data_url’) :
Комментарии:
1. В будущем, пожалуйста, не публикуйте изображения текстового содержимого, а вместо этого публикуйте фактический текст. Это не только делает ваш вопрос более доступным для поиска, но и позволяет нам легче использовать это сообщение об ошибке для поиска связанных вопросов: google.com /…
Ответ №1:
Чтобы загрузить изображение в хранилище Firebase с помощью put
, вам нужно передать blob
параметр as вместо string
.
Например, вы можете сделать что-то вроде этого:
import path from 'path'
const uid = 'image-id'
const fileName = uid path.extname(uri)
const response = await fetch(uri)
const blob = await response.blob()
const uploadImage = firebase
.storage()
.ref()
.put(blob, {
contentType: `image/${path.extname(uri).split('.').pop()}`
})
uploadImage.on(
'state_changed',
snapshot => {
// progress
},
err => {
// error
},
() => {
// complete
}
Комментарии:
1. Я пытался сделать так, как вы сказали, но не могу найти переменный путь
2. @vale1234ntina123 извините, я обновил свой ответ правильным импортом. Вам нужно добавить
path
модуль в свойpackage.json