【问题标题】:Convert image file to Blob将图像文件转换为 Blob
【发布时间】:2018-10-15 10:27:11
【问题描述】:

我有以下代码:

var file = document.getElementById("image1");
var filename = file.files[0].name;
//console.log("Archivo: " + filename);
var storageRef = firebase.storage().ref();
var ref = storageRef.child('imagenes/'+filename);

var reader = new FileReader();
var rawData;

reader.onload = function(e) {
    rawData = reader.result;   
}

reader.readAsBinaryString(file);

ref.put(rawData).then(function(snapshot){

});

File -> 获取数据文件输入(一张图片)。

我想在发送表单的那一刻将此文件转换为 blob,以 BLOB 格式将图像上传到 Firebase 存储,我该怎么做? 我使用了fileReader,但总是返回相同的错误:

“FileReader”上的“readAsBinaryString”:参数 1 不是“Blob”类型。

如何将文件图像转换为 blob?

【问题讨论】:

    标签: javascript html firebase


    【解决方案1】:

    您不能像现在这样在 onload 函数中简单地设置rawData。到ref.put() 运行时,onload 函数将不会被调用,因此 rawData 将始终未定义。 ref.put() 将文件作为其参数,因此只需使用ref.put(file.files[0])(无需阅读器):

    var file = document.getElementById("image1");
    var filename = file.files[0].name;
    //console.log("Archivo: " + filename);
    var storageRef = firebase.storage().ref();
    var ref = storageRef.child('imagenes/'+filename);
    
    ref.put(file.files[0]).then(...);
    

    另见非常常见的:How do I return the response from an asynchronous call?

    【讨论】:

    • 好的,但是现在,我有下一个错误:“FileReader”上的“readAsBinaryString”:参数 1 不是“Blob”类型。在最后一行。
    • @JuanmaPerez 查看我的编辑。 file 是一个 HTML 输入字段。您想访问.files[0] 来获取实际文件。
    • 在进行更改之前,Firebase 会响应此错误:put 索引 0 处的参数:预期的 Blob 或文件。 reader.result 不是 blob 吗?
    • 如果你只使用ref.put(file.files[0]) 而不是对读者做任何事情会发生什么?
    • 好的,刚刚解决了问题,并且工作正常。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多