0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

"putFile"で firebaseに画像をアップロードしようとするとエラーが出る時の対処法 [Firebase Storage][Flutter]

Posted at

firebaseに画像をアップロードしようとするとエラーが出る

開発環境

  • Flutter
  • firebase storage

エラー内容

 [firebase_storage/unknown] The operation couldn’t be completed. Message too long.

メッセージが長すぎると言われる
調べてみたところ、稀にiosでも同様のエラーが発生する場合があるらしい

試したこと

  1. 画像圧縮
  2. ファイル名短縮
  3. putFile → putDataに変更【💡解決!】

1. 画像圧縮✖

画像を幅600pxまで落とし、解像度を80%にしたが効果は無かった。

2. ファイル名短縮✖

もともと時間取得する関数で13桁の整数をファイル名にしていたが、それを6文字にしてみたが効果なし。

3. putFile → putDataに変更〇

putFileで送信していところをputDataで送るようにしたら画像をアップロードできるようになった!
putDataに置き換えるに伴って送信する画像の型など変換の必要があった。

解決方法

以下のコードでputDataとして送信

FirebaseStorage.instance.ref("image/sample").putData(uint8list, metadata)

なぜputDataだといけたのか

firebaeドキュメント

putDataとputFileの違い
putData ... メモリ内のデータからアップロードする
putFile ... デバイス上のファイルを表す URL (ローカルファイル)からアップロードする

文字列や File のアップロードが現実的でない場合は、下位の型付きデータを Uint8List 形式でアップロードできます。この場合は、データを指定して putData() メソッドを呼び出します。

ほえー
Fileがでかすぎたり何かしらの要因でアップロードできない場合は、Uint8List形式に変換してputData()で送信することでアップロードできるらしい。

Uint8Listについて

Uint8List...Dart型の1つで、固定長の8ビット符号なし整数のリスト

この辺が分かりやすかったです

画像ファイルをputDataでアップロードすることの弊害

  • putDataメソッドで保存しているので、putFileとは保存されるデータの形式が異なる。
    • firebase storageで画像が表示されない。画像を確認したい場合、URLからダウンロードして見る必要がある

最後に

このエラー自体あまり頻繁に起こることではなさそうですが、もし同じ状況になった際参考になれば良いと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?