为了账号安全,请及时绑定邮箱和手机立即绑定

FirebaseError:Firebase存储:字符串与格式“base64”不匹配:找到无效字符

FirebaseError:Firebase存储:字符串与格式“base64”不匹配:找到无效字符

慕标5832272 2023-07-20 17:08:04
我正在尝试将 Base64 图像上传到我的前基存储。我寻找了很长时间如何做到这一点,但找不到它,甚至在堆栈溢出流上也找不到。当我尝试上传图像时,出现此错误,提示字符串不是 base64 格式。我在几个将 Base64 转换为图像的网站上粘贴了相同的字符串,并且它工作得很好,所以该字符串没问题。我不知道我错过了什么,我不知道下一步该做什么......我将非常感谢任何类型的帮助。这是我的代码:const storageRef = firebase.default.storage().ref().child("users")    storageRef.putString(base64String, 'base64', { contentType: "image/jpg" }).then(snap => {        console.log("yay");    }).catch(err => {        console.log("not good");    })我的 base64 字符串不是以“data:image/jpg;base64”开头,它看起来像这样:“/9j/4...poi//Z”
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

我不确定firebase npm 包是否打算与 Node.js 一起使用,我认为根据我在网上阅读的内容,“firebase admin”可能会更好。很多人在与 Base64 进行转换时遇到问题,他们编写了自己的“atob:”和“btoa”polyfill 函数,以便该包可以与 Node.js 一起使用。此外,此 firebase 包需要“XMLHttpRequest”,即特定于浏览器,但如果你愿意,你可以安装更多的polyfills - 正如我在下面所做的 - 虽然看起来很丑。在浏览器中使用“firebase”npm 包而不是node.js 可能更容易。

我可以让它工作的唯一方法是将 base64 字符串转换为 blob,然后上传它,如下所示:

const firebase = require("firebase/app");

require("firebase/storage");

global.XMLHttpRequest = require("xhr2"); //polyfill

let app = firebase.initializeApp({

  apiKey: "",

  authDomain: "",

  databaseURL: "",

  projectId: "",

  storageBucket: "",

  messagingSenderId: "",

  appId: "",

});

let base64String = `iVBORw0KGgoAAAANS......`


const storageRef = firebase.storage().ref();

const imageRef = storageRef.child("123.jpeg");


//convert base64 to buffer / blob

const blob = Buffer.from(base64String, "base64");


imageRef

  .put(blob, {

    contentType: "image/jpeg",

  })

  .then(function (snapshot) {

    //console.log(snapshot);

    console.log("Uploaded blob");

  });

上传的 blob 在 firebase 存储中正确显示为图像,URL 可能位于快照的元数据中。

查看完整回答
反对 回复 2023-07-20
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信