2016-09-03 45 views
4

私はこのアプリを、ユーザーがプロフィール画像を持つことができる場所に設定しています。私はすべての設定をしましたが、画像が2MB +であれば、読み込むのに時間がかかり、実際には50KB程度の画像しか必要としません(画像の小さな表示、最大40ピクセル)。私はリアルタイムのデータベースに画像を直接書き込むコードを作った(キャンバスに変換し、7kbのbase64文字列にする)。しかし、これは本当にきれいではないし、Firebase Storageを使うほうが良い。Firebase Storageを使ってBase64イメージをアップロードする

新しいアップデート3.3.0以降、putString()メソッドを使用して、Base64形式の文字列をStorageにアップロードできます。しかし、キャンバスイメージ(「data:image/jpeg; base64」で始まる)をアップロードすると、エラーが表示されます:

v {code: "storage/invalid-format"、message: "Firebaseストレージ:文字列が 'base64':無効な文字が見つかりました "、serverResponse:null、名前:" FirebaseError "}の形式と一致しません。

先頭にキャンバスイメージの文字列があるためにこのエラーは発生しますか? Stack全体を検索しましたが、答えが見つからないようです。

答えて

6

私は非常に長い時間忙しかったが、私がこれを投稿した直後に、自分自身で答えを見つけた。解決策は、base64変数を取得し、最初の23桁を削除することでした( "data:image/jpeg; base64")。これをFirebase Storageにアップロードします。私は実際には同じ問題を抱えていたとputString(message, 'base64')を使用してdata:image/jpeg;base64,を遮断して、それを解決し

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!'); 
     }); 
+3

あなたは 'putString(myString、 'data_url')'を使ってみましたか?それはあなたが最初の23桁をハックアップする必要なく動作するかもしれません。 https://firebase.google.com/docs/reference/js/firebase.storage –

+0

@ AnthonyChuinardのソリューションが動作することを確認できます。 – Chrillewoodz

+0

ありがとう@AnthonyChuinard!これは動作します! – Francesco

1

:今では受け入れられますし、あなたはあなたを経由してリアルタイムデータベースにリンクを置くことができます。

Base64urlのフォーマットされた文字列putString(message, 'base64url')をアップロードする方法は、私にとってはうまくいかなかった。あなたと同じエラーが返されました。 putString(message, 'base64')を試してみてください。それが役に立てば幸い!

関連する問題