操作が思いどおりにいかないことや、エラーが発生することがあります。
疑わしいときは、返されたエラーをチェックして、エラー メッセージの内容を確認します。次のコードは、Cloud Storage から返されるエラーコードおよびエラー メッセージを検証するカスタム エラーハンドラの実装を示します。このようなエラーハンドラを、Cloud Storage API で使用されるさまざまなオブジェクト(UploadTask、FileDownloadTask など)に追加できます。
Kotlin
internal inner class MyFailureListener : OnFailureListener { override fun onFailure(exception: Exception) { val errorCode = (exception as StorageException).errorCode val errorMessage = exception.message // test the errorCode and errorMessage, and handle accordingly } }
Java
class MyFailureListener implements OnFailureListener { @Override public void onFailure(@NonNull Exception exception) { int errorCode = ((StorageException) exception).getErrorCode(); String errorMessage = exception.getMessage(); // test the errorCode and errorMessage, and handle accordingly } }
エラー メッセージをチェックし、Cloud Storage Security Rules で操作を許可した後でもエラーを解決できない場合は、サポートページにアクセスしてお問い合わせください。
エラー メッセージを処理する
エラーが発生する理由として、ファイルが存在しない、目的のファイルへのアクセス権がユーザーにない、ユーザーがファイルのアップロードをキャンセルしたなど、多くの理由が考えられます。
問題を適切に診断してエラーを処理するには、クライアントで発生するすべてのエラーとその発生理由について説明した、以下の全一覧をご覧ください。この表のエラーコードは、StorageException クラスで整数定数として定義されています。
| コード | 理由 | 
|---|---|
| ERROR_UNKNOWN | 不明なエラーが発生しました。 | 
| ERROR_OBJECT_NOT_FOUND | 特定の参照にオブジェクトが存在しません。 | 
| ERROR_BUCKET_NOT_FOUND | Cloud Storage 用のバケットが構成されてない | 
| ERROR_PROJECT_NOT_FOUND | Cloud Storage 用のプロジェクトが構成されていない | 
| ERROR_QUOTA_EXCEEDED | Cloud Storage バケットの割り当てを超えました。Spark 料金プランをご利用の場合は、従量課金制の Blaze 料金プランへのアップグレードを検討してください。すでに Blaze 料金プランをご利用の場合は、Firebase サポートまでお問い合わせください。 重要: | 
| ERROR_NOT_AUTHENTICATED | 承認されていないユーザーです。認証してから、もう一度お試しください。 | 
| ERROR_NOT_AUTHORIZED | 要求された操作を行う権限がユーザーにありません。ルールが正しいことをご確認ください。 | 
| ERROR_RETRY_LIMIT_EXCEEDED | オペレーション(アップロード、ダウンロード、削除など)の最大時間制限を超えました。もう一度お試しください。 | 
| ERROR_INVALID_CHECKSUM | クライアント上のファイルが、サーバーで受信されたファイルのチェックサムと一致しません。もう一度アップロードしてみてください。 | 
| ERROR_CANCELED | ユーザーがオペレーションをキャンセルしました。 | 
また、無効な URL を指定して getReferenceFromUrl() を呼び出そうとすると、IllegalArgumentException がスローされます。上記のメソッドの引数は、gs://bucket/object または https://firebasestorage.googleapis.com/v0/b/bucket/o/object?token=<TOKEN> の形式である必要があります。