操作が思いどおりにいかないことや、エラーが発生することがあります。
疑わしいときは、返されたエラーをチェックして、エラー メッセージの内容を確認します。次のコードは、Cloud Storage から返されるエラーコードおよびエラー メッセージを検証するカスタム エラーハンドラの実装を示します。このようなエラーハンドラを、Cloud Storage API で使用されるさまざまなオブジェクト(UploadTask
、FileDownloadTask
など)に追加できます。
Kotlin+KTX
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>
の形式である必要があります。