0



前回の Firebase Storage に関する記事の続きです。
今回は、Firebase Storage 上にあるファイルを、アプリにダウンロードしてみます。
公式のドキュメントはコチラです。
アップロードと同じように、ファイル/メモリ/ストリームに対してのダウンロードができます。
以下の例では、アプリの内部ストレージのファイルに対してダウンロードしています。
(実験のため、予め Firebase Storage にファイルを作っておきます。)
StorageReference fileRef = hogeRef.child("test.dat");
final File localFile = new File(getApplicationContext().getFilesDir(), "test.dat");
FileDownloadTask downloadTask = fileRef.getFile(localFile);
downloadTask.addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
Log.d(TAG, "getFile success");
Log.d(TAG, "getName : " + localFile.getName());
Log.d(TAG, "getPath : " + localFile.getPath());
Log.d(TAG, "length : " + localFile.length());
} else {
Log.d(TAG, "getFile failure", task.getException());
}
}
});
成功した場合、onComplete が呼ばれます。
実際にファイルが作られたかどうかは、Android Studio のファイルエクスプローラなどで確認できます。
サイズが大きいものをダウンロードする場合、ダウンロードの経過状況を表示したいことがあります。
downloadTask.addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull FileDownloadTask.TaskSnapshot task) {
Log.d(TAG, "onProgress");
Log.d(TAG, "getBytesTransferred : " + task.getBytesTransferred());
Log.d(TAG, "getTotalByteCount : " + task.getTotalByteCount());
}
});
このようにすると、onProgress が一定時間毎にコールバックされます。
また、ダウンロードの途中で、ユーザーの操作によって、一時停止/再開/キャンセルすることもできます。
そのためには downloadTask に対して、pause()/resume()/cancel() メソッドを呼び出します。
ダウンロードが一時停止された場合、以下のコールバックが発生します。
downloadTask.addOnPausedListener(new OnPausedListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onPaused(@NonNull FileDownloadTask.TaskSnapshot task) {
Log.d(TAG, "onPaused");
}
});
キャンセルされた場合は、onComplete が発生します。この場合、task.isSuccessful() は false となります。
0