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

我正在尝试将 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”


慕标5832272
浏览 118回答 1
1回答

慕的地6264312

我不确定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"); //polyfilllet 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 / blobconst blob = Buffer.from(base64String, "base64");imageRef  .put(blob, {    contentType: "image/jpeg",  })  .then(function (snapshot) {    //console.log(snapshot);    console.log("Uploaded blob");  });上传的 blob 在 firebase 存储中正确显示为图像,URL 可能位于快照的元数据中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript