Android에서 Cloud Storage 오류 처리

예기치 않은 상황으로 인해 오류가 발생하기도 합니다.

의심스러운 경우 반환되는 오류를 점검하여 오류 메시지의 내용을 확인하세요. 다음 코드에서는 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 지원팀에 문의하세요.

중요: 2025년 10월 1일부터 기본 버킷을 포함하여 Cloud Storage을 사용하려면 Blaze 요금제를 사용해야 합니다.
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> 형식이어야 합니다.