Попытка загрузить изображение в хранилище firebase

#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