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 | Flutter Package (pub.dev)

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);
	}
}