12

我正在尝试将画布作为图像保存到 firebase 存储中。我已经阅读了许多有关将画布保存到服务器的文章和问题,并尝试使用以下代码实现相同的功能。

function server(){
    canvas = document.getElementById("c");
    var storageRef = firebase.storage().ref();
    var mountainsRef = storageRef.child('mountains.jpg');
    var image = new Image();
    image.src = canvas.toDataURL("image/png");
    var uploadTask = storageRef.child('images/' + "apple").put(image);
    uploadTask.on('state_changed', function(snapshot){
        // Observe state change events such as progress, pause, and resume
        // See below for more detail
    }, function(error) {
        // Handle unsuccessful uploads
    }, function() {
        // Handle successful uploads on complete
        // For instance, get the download URL: https://firebasestorage.googleapis.com/...
        var downloadURL = uploadTask.snapshot.downloadURL;
    });
}

但是当我运行 Web 应用程序时,控制台显示错误:

FirebaseError:Firebase 存储:put索引 0 处的参数无效:预期的 Blob 或文件。

如何成功地将画布保存到 Firebase 存储?

4

1 回答 1

9

是的,这是可能的。您遇到的问题是您正在尝试上传 dataUrl 但 firebase 的 put 函数仅不包括 blob 或文件。要将画布转换为 blob,请使用该toBlob函数。

canvas.toBlob(function(blob){
  var image = new Image();
  image.src = blob;
  var uploadTask = storageRef.child('images/' + "apple").put(blob);
}); 

编辑:更改var uploadTask = storageRef.child('images/' + "apple").put(image);var uploadTask = storageRef.child('images/' + "apple").put(blob);

也不确定这是否适用于您的情况,当我尝试它时,我遇到了一个受污染的画布错误。

对我有用的是这个问题的答案How to convert dataURL to file object in javascript?

于 2016-07-05T16:53:03.610 回答