图像不会上传到本机反应中的 firebase 存储桶

Image wont upload to firebase storage bucket in react native

我正在尝试将图像上传到我的 firebase firestore 存储桶。因此,下面的功能实现了,但只上传了一个新的 child 作为文本,而不是它自己的图像。

我如何才能将图片上传为 .jpeg/.png 或是否必须将其转换为其他文件类型才能正常工作?

当我使用这个方法时:

const testImage = require('../assets/mom.png')

在我的控制台中返回值“13”。

const storage = firebase.storage();
const sendToStorage = () => {
        const testImage = require('../assets/mom.png')
        
       
        const ref = storage.ref()
        .child('another-child');

        ref.put(testImage).then((snapshot) => {
          console.log('Uploaded a blob or file!');
        });
        
      }

require('../assets/mom.png') 结果是什么类型? Firebase 只能从 base64 编码的字符串、byte[]BlobFile 引用上传数据。

有关工作示例,请参阅 uploading files 上的 RNFirebase 文档。

我在网上找到了这个解决方案,并使用 URL 对我的 firebase 存储桶的引用将我的图像文件转换为 blob 并上传。

从 FIREBASE STORAGE CONFIG 导入 Firebase 存储

import Firebase, {storage} from '../config/Firebase';

Firebase.js(FIREBASE 存储配置)

import firebase from 'firebase';
import "firebase/storage";

const firebaseConfig = {
    apiKey: "YOUR_API_KEY",
    authDomain: "YOUR_PROJECT_AUTH_DOMAIN",
    databaseURL: "YOUR_DATABASE_URL",
    projectId: "YOUR_PROJECT_NAME",
    storageBucket: "YOUR_STORAGE_URL",
   
};

// Initialize Firebase
let Firebase = firebase.initializeApp(firebaseConfig)


// ... before export default statemen
export const db = firebase.firestore()
export const storage = firebase.storage();
export const storageRef = storage.ref();
export default Firebase;

下面将图像转换为 blob 并将其上传到上面设置的 firebase 存储配置。从您的设备访问图像 uri 后,需要将其传递到函数中。下面它作为 'image' 传递给函数 sentToStorage()。

转换为 BLOB

const sendToStorage = async (image) => {

      let uri = image;
      const filename = uri.substring(uri.lastIndexOf("/") + 1);
      const uploadUri = Platform.OS === "ios" ? uri.replace("file://", "") : uri;
      blob()
    

      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);
      });
      
      firebase
        .storage()
        .ref()
        .child("user/" + userid)
        .put(blob)
        .then((uri) => {
          console.log(uri);
        })
        .catch((error) => {
          console.log(error);
        });

        '') : image
         
        let formData = new FormData();
        formData.append("image", {
          name: filename,
          type: 'image/jpeg',
          uri: uploadUri
        })
        
        var metadata = {
          contentType: 'image/jpeg',
        };