javascript - 使用 Firebase 存储上传 base64 图像

标签 javascript image canvas firebase firebase-storage

我正在制作这个应用程序,用户可以在其中拥有个人资料照片(但每个人只有一张照片)。我把所有东西都设置好了,但是当图片超过 2mb 时,加载需要一些时间,实际上我只需要 50kb 左右的图片(只显示小图片,最大 40 像素)。我编写了一些代码将图像直接放入实时数据库(转换为 Canvas 并使它们成为 7kb 的 base64 字符串)。但是,这并不是很干净,最好使用 Firebase 存储。

从新的更新 3.3.0 开始,您可以使用 putString() 方法将 Base64 格式的字符串上传到存储。但是,当我上传 Canvas 图像(以“data:image/jpeg;base64,”开头)时,出现错误:

v {code: "storage/invalid-format", message: "Firebase Storage: String does not match format 'base64': Invalid character found", serverResponse: null, name: "FirebaseError"}

强>.

这个错误是不是因为开头的canvas图片的字符串?我搜索了整个 Stack,但似乎找不到答案。

最佳答案

哎呀,我已经忙了很长时间了,但就在我发布这个之后,我自己找到了答案。解决方案是获取 base64 变量并删除前 23 位数字(因此:“data:image/jpeg;base64,”)并将其上传到 Firebase 存储。现在它被接受了,您可以通过以下方式将链接放入您的实时数据库中:

var storageRef = firebase.storage().ref().child("Whatever your path is in Firebase Storage");
var imageRef = "Your path in the Realtime Database";

    storageRef.getDownloadURL().then(function(url) {
        imageRef.child("image").set(url);
    }); 

    var task = storageRef.putString("Your base64 string substring variable", 'base64').then(function(snapshot) {
         console.log('Uploaded a base64 string!');
         });

关于javascript - 使用 Firebase 存储上传 base64 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310147/

相关文章:

javascript - 为什么 lineTo() 会改变内部像素?

javascript - Canvas 获取透视点

javascript - Angular 4 - 通过键从 JSON 获取值

Python OpenCV将图像转换为字节字符串?

iphone 图像到 Ruby on Rails - 内容主体错误,parse_multipart

html - 当鼠标悬停在链接上时如何显示图像

javascript - 阻止用户使用ajax提交自己的图像?

javascript - 如何在随机十六进制颜色生成器上设置不变的透明度

javascript - 将值传递给 javascript 到 php 变量 : It do not work?

javascript - 将变量传递给 LatLngBounds