ERROR_UNKNOWN при загрузке файла из хранилища Firebase

Я пытаюсь загрузить файл *.Apk из хранилища и установить, когда он будет завершен. я пересмотрел правила хранения и использования.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read : if request.auth.uid != null;
    }
  }
}

в мониторе правил все операции принимаются, но файл не загружается

фрагмент кода загрузки:

public void downloadUpdate() {
    StorageReference gsReference = FirebaseStorage.getInstance("filename.apk");
    final String rutadestino = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
    final String nombrearchivo = "LeaderBoard-Upd.apk";
    final Uri archivodestino = Uri.parse("file://" + rutadestino+nombrearchivo);
    File localFile = new File(rutadestino+nombrearchivo);
    if (localFile.exists()) {
        localFile.delete();
    }

    gsReference.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
             //Local temp file has been created
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".provider", new File(rutadestino+nombrearchivo));
                Intent install = new Intent(Intent.ACTION_VIEW);
                install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                install.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                install.setData(contentUri);
                startActivity(install);
                //unregisterReceiver(this);
                finish();
            } else {
                Intent install = new Intent(Intent.ACTION_VIEW);
                install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                install.setDataAndType(archivodestino,
                        "application/vnd.android.package-archive");
                startActivity(install);
                //unregisterReceiver(this);
                finish();
            }
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
            int errorCode = ((StorageException) exception).getErrorCode();
            String errorMessage = exception.getMessage();
            Emergente.ErrorCode(1,getApplicationContext());
        }
    });
}

я получил код ошибки 13000 errorMessage Произошла неизвестная ошибка, проверьте код результата HTTP и внутреннее исключение для ответа сервера. причина открытия не удалась: EACCES (отказано в доступе)

Может быть, другой фрагмент кода неверен, но в этот момент я застрял на OnFailureListener


person Adri    schedule 11.01.2021    source источник
comment
Вы ищете URL, сформированный следующим образом: http://storage.googleapis.com/<bucket>/<object> вы можете увидеть больше информации на документы GCS. также будьте осторожны при размещении полного URL-адреса, так как это может быть опасно.   -  person Louis C    schedule 16.01.2021
comment
извините, я перепутал поставщика хранилища. но проблема та же   -  person Adri    schedule 18.01.2021


Ответы (1)


Проблема заключается в разрешениях приложения, когда приложение пытается загрузить файлы и записать их в неправильный каталог/файл без необходимого разрешения, оно выдаст сообщение ERROR_UNKNOWN.

Решение состоит в том, чтобы создать файл в том же каталоге приложения, при этом разрешение не требуется, если только API ‹= 18, тогда разрешение будет необходимо.

Решение:

File localFile = new File(getExternalFilesDir(null), "file.apk");
person Adri    schedule 18.01.2021