Firebase 활용한 이미지 업로드 시 에러가 발생합니다.

조회수 1843회
  • tasksnapshot.getdownloadurl()에 관한 오류를 잡고 싶은 분들은 app 버전의 gradle에서 database 버전을 다운그레이드하면 사용 가능합니다! 버그를 잡을 방법을 몰라 예전 코드 참조해서 12.0.1로 변경하니 해당 메소드 사용가능합니다.

Firebase DB를 활용해 이미지를 업로드 하는 기능을 구현했는데, Firebase에서 tasksnapshot.getdownloadurl()가 더이상 지원되지 않아 다른 방식으로 변경했으나 버그가 발생합니다. 어떻게 해결할 수 있을까요?

코드는 다음과 같습니다.

디버깅 코드를 읽다보니 java.io.IOException: {"error": {"code": 403, "message": "Developer credentials required."}} 라는 에러 코드가 발생합니다.

private void upload(String uriString) {
    final StorageReference storageRef
            = storage.getReferenceFromUrl("gs://howlfirebasetest1-8cb99.appspot.com");

    // 다음과 같이 정상적으로 경로를 받아옵니다.
    Uri file = Uri.fromFile(new File(uriString));
    StorageReference riversRef
            = storageRef.child("images/" + file.getLastPathSegment());
    UploadTask uploadTask = riversRef.putFile(file);

    uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
        @Override
        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
            if (!task.isSuccessful()) {
                throw task.getException();
            }
            return storageRef.getDownloadUrl();
        }
    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()) {
                Uri downloadUri = task.getResult();

                // 더이상 지원되지 않습니다.
                // @SuppressWarnings("VisibleForTests")
                // Uri downloadUrl = taskSnapshot.getDownloadUrl();

                // 데이터 테이블 생성 및 호출해줍니다.
                ImageDTO imageDTO = new ImageDTO();
                imageDTO.imageUri = downloadUri.toString();
                imageDTO.title = titleEditText.getText().toString();
                imageDTO.description = descriptionEditText.getText().toString();

                imageDTO.uid = auth.getCurrentUser().getUid();
                imageDTO.userId = auth.getCurrentUser().getEmail();

                database.getReference().child("images").push().setValue(imageDTO);
                Toast.makeText(HomeActivity.this, "업로드가 완료되었습니다.", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(HomeActivity.this, "업로드 실패", Toast.LENGTH_SHORT).show();
            }
        }
    });
}
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)