Как получить отклоненную ошибку при загрузке из-за правила ограничения размера файла из хранилища Firebase - PullRequest
0 голосов
/ 19 марта 2020

Я установил правило в хранилище Firebase, чтобы пользователь мог загружать файл не более 20 МБ,

service firebase.storage {
          match /b/{bucket}/o {
          match /{allPaths=**} {
                     allow write: if request.auth !=null;
                     allow read: if  request.auth !=null
                                      && request.resource.size < 20 * 1024 * 1024;
                               }
                              }
                          }

Это работает нормально, но проблема в том, что видео отклонено сервером из-за для превышения лимита нет слушателя, чтобы получить это сообщение или ошибку.

Я пробовал следующее безуспешно

       UploadTask uploadTask = FirebaseStorage.getInstance().getReference()
                .child("VideoText")
                .child(VideoIdentifire)
                .putFile(SendVideo);
        uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {

                long progress = 0;
                progress = (long) (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();

                Toast.makeText(getContext(), "Uploading is " + progress + "% done", Toast.LENGTH_LONG).show();

                 }
              })

                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                        Toast.makeText(getContext(), "Fail" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnCanceledListener(new OnCanceledListener() {
                    @Override
                    public void onCanceled() {

                        Toast.makeText(getContext(), "cancel", Toast.LENGTH_SHORT).show();
                    }
                })

                .addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onPaused(@NonNull UploadTask.TaskSnapshot taskSnapshot) {

                        Toast.makeText(getContext(), "paused", Toast.LENGTH_SHORT).show();

                    }
                })

                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

               }
                });

Как мне решить эту проблему?

1 Ответ

1 голос
/ 19 марта 2020

Ваши правила отклоняют чтение операций с ресурсами, размер которых превышает 20 МБ, а ваш код записывает файл. Чтобы отклонить операцию write , необходимо добавить проверку размера к правилу записи (тоже):

 allow write: if request.auth !=null;
                  && request.resource.size < 20 * 1024 * 1024;
...