Правила безопасности хранилища Firebase - размер свойства для объекта не определен - PullRequest
3 голосов
/ 18 июня 2020

Я пытаюсь наложить ограничение на размер загружаемого файла, используя приведенный ниже код (request.resource.size < 5 * 1024 * 1024), и при загрузке изображения я получаю ошибку отказа в разрешении.

После запуска в симуляторе я пришел к выводу что требование, вызывающее ошибки, было размером менее 5 МБ. В симуляторе выдается ошибка (Property size is undefined on object.), и когда я проверил объект request.resource, не было свойства size, только contentType, name и bucket.

Как могу ли я правильно установить ограничение в 5 МБ?

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /profile_images/{profileImgId}/{imgId} {
      allow create, update: if request.auth.uid == profileImgId
                    && request.resource.size < 5 * 1024 * 1024
                    && request.resource.contentType.matches('(?i)image/(jpeg|jpg|png)');
      allow delete: if false;
      allow get: if request.auth.uid == profileImgId;
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 30 июня 2020

Просто предложение. Я также использовал тот же код, что и fatalcoder524 , показанный выше для моего приложения android. Но я также хотел поймать исключение: было ли это из-за исключения размера или из-за сбоя по какой-то другой причине, поэтому я воспользовался помощью кодов ошибок Storage Exception, чтобы идентифицировать их на стороне клиента. Вот фрагмент моего кода ..

int errCode = ((StorageException) exception).getErrorCode();
if(errCode == ERROR_NOT_AUTHORIZED)
Toast.makeText(view.getContext(),"Size of file must be\nless than 5 MB", Toast.LENGTH_LONG).show();
0 голосов
/ 30 июня 2020

Эти правила безопасности в хранилище firebase работают для меня: -

5 МБ = 5242880 байт

service firebase.storage {
  match /b/{bucket}/o {
    match /profile {
        allow read, write: if request.resource.size < 5 * 1024 * 1024;
    }
  }
}

Успех (5242879 байт): Success

Failure (5242881 bytes): Неудача

...