首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中将文件路径转换为文件对象

在JavaScript中将文件路径转换为文件对象
EN

Stack Overflow用户
提问于 2020-10-28 19:42:57
回答 1查看 74关注 0票数 0

我想要在服务器上使用JavaScript上传文件,并且有文件路径,但firebase不允许从文件路径上传文件,它显示以下错误消息:

代码语言:javascript
复制
code_: "storage/invalid-argument"
message_: "Firebase Storage: Invalid argument in `put` at index 0: Expected Blob or File."
name_: "FirebaseError"
serverResponse_: null

如何上传文件或将文件路径转换为文件对象?

EN

回答 1

Stack Overflow用户

发布于 2020-10-28 20:13:14

您可以使用此函数在firebase中上传文件。uri是进一步创建firebase中所需文件类型的文件路径。

代码语言:javascript
复制
   const uploadImage = async (uri) => {
         const uniqid = () => Math.random().toString(36).substr(2, 9);
         const ext = uri.split('.').pop(); // Extract image extension
         const filename = `${uniqid()}.${ext}`; // Generate unique name
         const ref = fb.storage().ref().child(`images/${filename}`);
         const response = await fetch(uri);
        // const blob = await response.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);
     });
     const snapshot = await ref.put(blob);
     blob.close();
     const imgUrl = await snapshot.ref.getDownloadURL();
      return imgUrl;
   }

在此函数之后,您可以调用此函数将图像上传到firebase数据库中,如下所示。

代码语言:javascript
复制
  const formSubmit= async(values, action)=>{
      console.log(values);
      try{
          uploadImage(image) //this is my image upload code
          .then( async(res) => {
             setLoader(false);
             var user = fb.auth().currentUser;
             await user.updateProfile({
               displayName: values.name,
               photoURL: res // use the response url to store in mapped data table
            }).then(function(res) {
                console.log(res)
            }).catch(function(error) {
               console.log(error)
            });
        })
        .catch(error => {
            console.log('it does not work')
            console.error(error)
        })
     }catch(error){
        console.log(error)
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64572132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档