2016-06-17 19 views
5

私はfirebaseストレージに画像としてキャンバスを保存しようとしています。キャンバスをサーバーに保存することに関する多くの記事や質問を読んで、以下のコードで同じように実装しようとしました。キャンバスをイメージとして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 Storage: Invalid argument in put at index 0: Expected Blob or File.

どのように私は成功しFirebaseストレージにキャンバスを保存することができますか?

答えて

4

はい可能です。あなたが持っている問題は、あなたがdataUrlをアップロードしようとしているが、ファイアベースのput関数はブロブやファイルを除いてのみであるということです。キャンバスを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(blob);

var uploadTask = storageRef.child('images/' + "apple").put(image);を変更しました。私の仕事は何

この質問How to convert dataURL to file object in javascript?

+0

への答えだった私はあなたのソリューションを試みたが、今私は2つのエラー 'Firebaseストレージ取得しています:インデックス0のプットの無効な引数:予想されるBLOBまたはFile.'をして' http:// localhost:11080/[object%20Blob] 404(見つからない) ' – pavitran

関連する問題