Хранилище Firebase - ограничьте размер изображения, которое пользователи загружают в хранилище Firebase.

Я новый разработчик Firebase. Я разрабатываю приложение для Android, которое позволяет пользователям загружать изображения в хранилище firebase. Поскольку я использую режим Spark, у меня есть только 5 ГБ памяти. Я хочу ограничить размер изображений, которые пользователи загружают в хранилище firebase. Ниже приведен код, который я использую для загрузки изображения в хранилище firebase.

Uri imageUri = Uri.parse(imagePath);
                    //need permistion android.permission.MANAGE_DOCUMENTS to upload file.
                    final StorageReference photoRef = mStorageRef.child(Constants.FIREBASE_LOCATION_IMAGE_EXAM).child(imageUri.getLastPathSegment());
                    taskStarted();
                    photoRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Log.d(TAG, "upload success");
                            mUploadExamTaskCount--;
                            examURLArray.add(new ExamPage(taskSnapshot.getDownloadUrl().toString()));
                            if (mUploadExamTaskCount == 0) {//upload files success.
                                /**
                                 * update image link to database.
                                 */
                                DatabaseReference firebaseExamPage = FirebaseDatabase.getInstance().getReference(Constants.FIREBASE_LOCATION_EXAM_PAGE);
                                firebaseExamPage.child(examKey).setValue(examURLArray);
                                Log.d(TAG, "send upload  exam success br");
                                Intent taskCompletedIntent = new Intent(ACTION_UPLOAD_EXAM_COMPLETED);
                                LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(taskCompletedIntent);
                            }
                            taskCompleted();
                        }
                    })

Вы знаете, как решить эту проблему?


person Zappy.Mans    schedule 15.07.2016    source источник
comment
Вы можете ограничить размер файла в самом хранилище firebase, используя правила безопасности. посетите этот сайт или вторую часть это видео   -  person André Kool    schedule 15.07.2016


Ответы (3)


Согласно документам правил безопасности хранилища Firebase, вы можете написать правила, которые проверяют размер загруженный файл:

service firebase.storage {
  match /b/<bucket>/o {
    match /files/{fileName} {
      allow read;
      allow write: if request.resource.size < 10 * 1024 * 1024; // 10MB limit for instance
    }
  }
}
person Mike McDonald    schedule 18.07.2016
comment
что произойдет, если я попытаюсь загрузить изображение размером более 10 МБ, оно сжимается или отклоняется? - person Anbarasu Chinna; 23.07.2018
comment
Он будет отклонен. Сожмите клиентскую сторону, если вы хотите иметь изображения меньшего размера (или иметь зону перетаскивания с более высоким ограничением размера и запускать облачные функции для изменения размера изображений). - person Mike McDonald; 24.07.2018

ИЗМЕНЕНИЕ РАЗМЕРА НА СТОРОНЕ КЛИЕНТА ИСПОЛЬЗОВАНИЕМ JS

Если ваша цель - не обязательно ограничивать пользователя, но сохранять изображения небольшого размера, лучше изменить размер изображения на стороне клиента с помощью JavaScript.

Это было идеальное решение для нас, сэкономившее:

  1. Пространство на нашем хостинге,
  2. Деньги за это место для хостинга,
  3. Время посетителя во время загрузки (обычно более чем в 10 раз меньше),
  4. Деньги посетителя при загрузке через мобильную ограниченную полосу пропускания,
  5. Проблемы и неприятный опыт посетителя при попытке загрузить большую фотографию, которые мы ограничили бы другими решениями.

Если вам интересно, вы можете последовать этому другому ответу от dcollien, в котором мы основали изменение размера:

https://stackoverflow.com/a/31669706/1920145

Как видно из этого ответа, метод использования действительно прост, и включаемый скрипт представляет собой только один небольшой файл JS / ES6.

Я считаю, что этот парень (dcollien) заслуживает гораздо большего, поэтому предлагаю вам проголосовать за его ответ и этот ответ (чтобы другие сочли его актуальным).

person DavidTaubmann    schedule 22.04.2017
comment
Эта ссылка действительно заслуживает медали. - person johnozbay; 04.07.2017

Может опоздать, но может помочь другому новичку :-) Вы можете уменьшить размер загрузки в байтах следующим образом:

StorageReference fileToUpload = mStorage.child("xyz").child(x);
                        ByteArrayOutputStream bao = new ByteArrayOutputStream();
                        photo.invalidate();
                        BitmapDrawable drawable = (BitmapDrawable) photo.getDrawable();
                        Bitmap  imp = drawable.getBitmap();
                        imp.compress(Bitmap.CompressFormat.JPEG, 25, bao);
                        byte[] byteArray = bao.toByteArray();
                        UploadTask uploadTask = fileToUpload.putBytes(byteArray);
person COANS International    schedule 13.05.2021