この記事で紹介する内容
今回は、Androidアプリで画像をアップロードする機能を実装したい方向けに、Firebaseを使えば簡単に画像アップロード機能を実装できることを紹介したいと思います。
具体的にいうと、この記事を読めば、実質たった3行のコードを書くだけで、画像を含めたファイルのアップロード機能を作成することができるようになります。
この記事を読んだ後に、「なんだ、Firebaseってめっちゃ使いやすいじゃいないか」と思っていただいた方にはFirebaseの公式ドキュメントをご一読いただき、その機能の豊富さとシンプルさに是非驚いていただけると幸いです。
依存関係を追加する
Cloud Storageライブラリの依存関係を追加します。
そのために、以下の内容をbuild.gradleのdependenciesに追加してください。
implementation platform('com.google.firebase:firebase-bom:31.1.1')
implementation 'com.google.firebase:firebase-storage-ktx'
Cloud Storageにアップロードする
Cloud Storageにファイルをアップロードする場合は、次のように実質たった3行のコードを書くだけで、Androidアプリでアップロード機能を実装することができます。
val storage = Firebase.storage
val ref = storage.reference.child(filePath)
ref.putFile(fileUri).await()
Hiltを使ったコンストラクタインジェクションを使ってstorage
を取得する場合は、次のような実装をクラスを作成してみてください。
class StorageServiceImpl @Inject constructor(
private val storage: FirebaseStorage
) : StorageService {
override suspend fun upload(fileUri: Uri, filePath: String): UploadTask.TaskSnapshot {
val ref = storage.reference.child(filePath)
return ref.putFile(fileUri).await()
}
}
StorageReferenceの取得
FirebaseStorage
のインスタンスに対してreference.child()
を呼び出して、StorageReference
インスタンスを作成します。
val reference = storage.reference.child(filePath)
この時child()
に渡す値は、Cloud Storage上のパスを表します。
例えば、画像ファイルをアップロードする際は次のようになると思います。
val filePath = "images/$fileName"
putFile()に渡すUriを取得する方法
そして、StorageReference
インスタンスに対して、putFile()
を呼び出します。このputFile()
に対してUri
型の値を渡せば良いので、rememberLauncherForActivityResult()
の呼び出しによって取得した値を渡すと簡単に画像をアップロードできます。
rememberLauncherForActivityResult()
の詳細については、こちらの記事をご参照ください。
まとめ
タイトルでは、実質たった3行で・・・と書きましたが、FirebaseStorage
のインスタンスの取得を除けば、実質たった2行で画像をアップロードする機能を実装できます。
val ref = storage.reference.child(filePath)
ref.putFile(fileUri).await()
この簡潔さを、既存のAndroidプロジェクトにFirebaseを導入することによって、ぜひ体験していただくことをおすすめします!
参考にした記事