Firebase 错误:Firebase 存储:字符串与格式"base64"不匹配:找到无效字符



我正在尝试将base64图像上传到我的前库存储中。我找了很长时间怎么做,但找不到,甚至在这里也找不到。当我尝试上传图片时,我收到了一个错误,说字符串的格式不是base64。我在几个网站上粘贴了相同的字符串,将base64转换为image,效果很好,所以字符串还可以。我不知道我缺少了什么,我不知道下一步该怎么办。。。我将非常感谢任何形式的帮助。这是我的代码:

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字符串没有开始";数据:image.jpg;base64";,它看起来是这样的:/9j/4…poi//Z";

我不确定firebase npm包是否打算与Node.js一起使用,我认为"firebase管理员;从我在网上读到的内容来看可能会更好。很多人在转换到base64和从base64转换时都有问题,他们编写了自己的";atob:和";btoa";polyfill函数,以便该包可以与Node.js一起使用;XMLHttpRequest";这是特定于浏览器的,但如果你愿意的话,你可以安装更多的polyfill——就像我在下面所做的那样——看起来很难看。使用";"火球";浏览器中的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可能在快照的元数据中。这是我用于测试的图像:https://firebasestorage.googleapis.com/v0/b/testbase64-12cae.appspot.com/o/123.jpeg?alt=media&令牌=23ccfe34-907f-405b-a11a-3ae686941d3f

最新更新