FirebaseStorage
概要
Firebase Storageとは、Firebaseの機能の一つで写真や動画などのユーザ作成コンテンツを保存するインフラストラクチャを提供する。
Quote
Cloud Storage for Firebase は、Google の基準や規模をもとに構築された、強力かつシンプルでコスト効果の高いオブジェクト ストレージ サービスです。Cloud Storage 用の Firebase SDK では、ネットワーク品質にかかわらず、Firebase アプリでのファイルのアップロードとダウンロードに Google のセキュリティが適用されます。
このクライアント SDK は、画像、音声、動画、またはその他のユーザーが生成したコンテンツを格納する場合に使用できます。使用されるサーバーでは、Firebase Admin SDK を使用してバケットを管理し、ダウンロード URL を作成できます。また、Google Cloud Storage API を使用してファイルにアクセスできます。
使用方法
Web側
まずは、Firebaseプロジェクトページ左の構築 → storageを選択する。

始めるをクリックする。

いくつかの項目を設定したら、このような画面になる。

ファイルのアップロードを選択するとファイルをFirebaseStorage上にアップロードできる。

その右隣のボタンをクリックすると、Storage上にディレクトリを作成することができる。

コード側
導入
まずはpubspec.yamlへ、依存関係を追加する。
firebase_storage: ^11.5.6ダウンロード
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'package:test/firebase_options.dart';final _IMAGE_NAME = "ここにFirebaseStorageからダウンロードしたいファイル名を入れる";
Image? _img;
Text? _text;
Future<void> _download() async {
FirebaseStorage storage = FirebaseStorage.instance;
//DLというディレクトリからダウンロードしている。
Reference imageRef = storage.ref().child("DL").child("${_IMAGE_NAME}");
String imageUrl = await imageRef.getDownloadURL();
//Textデータもダウンロードすることができる。
Reference textRef = storage.ref("DL");
var data = await textRef.getData();
setState(() {
_img = Image.network(imageUrl);
_text = Text(ascii.decode(data!));
});
//ローカルに保存している
Directory appDocDir = await getApplicationCacheDirectory();
File downloadToFile = File("${appDocDir.path}/download-${_IMAGE_NAME}");
try{
await imageRef.writeToFile(downloadToFile);
}
catch(e){
print(e);
}
}アップロード
void _upload() async {
//ImagePickerを使用してローカルから画像を選択
final pickerFile = await ImagePicker().pickImage(source: ImageSource.gallery);
if(pickerFile == null) return;
File file = File(pickerFile.path);
FirebaseStorage storage = FirebaseStorage.instance;
try{
await storage.ref("UL/upload-pic.png").putFile(file);
setState(() {
_img = null;
_text = const Text("UploadDone");
});
}
catch(e){
print(e);
}
}