Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase存储-上载带有React本机的图像,加载预览时出错_Javascript_Firebase_React Native_Expo_Firebase Storage - Fatal编程技术网

Javascript Firebase存储-上载带有React本机的图像,加载预览时出错

Javascript Firebase存储-上载带有React本机的图像,加载预览时出错,javascript,firebase,react-native,expo,firebase-storage,Javascript,Firebase,React Native,Expo,Firebase Storage,这是我用来将图像上传到firebase存储的代码 const filename = image.substring(image.lastIndexOf('/') + 1); const uploadUri = Platform.OS === 'ios' ? image.replace('file://', '') : image var metadata = { contentType: 'image/jpeg', }; const task = firebase.storage().ref

这是我用来将图像上传到firebase存储的代码

const filename = image.substring(image.lastIndexOf('/') + 1);
const uploadUri = Platform.OS === 'ios' ? image.replace('file://', '') : image
var metadata = {
  contentType: 'image/jpeg',
};
const task = firebase.storage().ref().put(uploadUri, metadata)
try {
 await task
} catch(err) {
 console.log(err)
}
但当我检查firebase控制台时,它显示加载预览时出错,并且图像的文件大小为9B。有什么我遗漏的吗。

我正在使用Expo管理的Expo图像选择器选择图像。

将其更改为此

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

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

var metadata = {
  contentType: 'image/jpeg',
};

const task = firebase.storage().ref().put(formData, metadata)
try {
 await task
} catch(err) {
 console.log(err)
}

我找到了一种方法,我必须创建一个blob,然后将该blob上传到firebase

    const filename = image.substring(image.lastIndexOf('/') + 1);

    const blob = await new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();
      xhr.onload = function() {
        resolve(xhr.response);
      };
      xhr.onerror = function() {
        reject(new TypeError("Network request failed"));
      };
      xhr.responseType = "blob";
      xhr.open("GET", image, true);
      xhr.send(null);
    });
    const ref = firebase
      .storage()
      .ref()
      .child(filename);
      
    const task = ref.put(blob, { contentType: 'image/jpeg' });

    task.on('state_changed', 
      (snapshot) => {
        console.log(snapshot.totalBytes)
      }, 
      (err) => {
        console.log(err)
      }, 
      () => {
        task.snapshot.ref.getDownloadURL().then((downloadURL) => {
          console.log(downloadURL);
      });
    })

您在从
expo图像采集器
中提取图像时有任何问题吗。我的应用程序将在我拾取图像后立即重新启动。不,expo image picker工作正常,加载预览时仍然出错,文件大小为9B