web-dev-qa-db-ja.com

Firebaseストレージ-ユーザーがFirebaseストレージにアップロードする画像のサイズを制限する

私は新しいFirebase開発者です。ユーザーがFirebaseストレージに画像をアップロードできるAndroidアプリを開発しています。Sparkモードを使用しているため、5Gbのストレージしかありません。制限したいユーザーが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();
                        }
                    })

この問題を解決する方法を知っていますか?

12
Zappy.Mans

Firebase Storage Security Rules docs に従って、アップロードされたファイルのサイズをチェックするルールを作成できます。

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
    }
  }
}
19
Mike McDonald

JSを使用したクライアント側のサイズ変更

必ずしもユーザーを制限することではなく、画像を小さいサイズに保つことが目標である場合は、JavaScriptを使用してクライアント側で画像のサイズを変更するの方がよいでしょう。

それは私たちにとって完璧な解決策であり、以下を節約しました。

  1. 私たちのホスティングのスペース、
  2. そのホスティングスペースのためのお金、
  3. アップロード中の訪問者の時間(通常は10分の1以下)、
  4. モバイル限定帯域幅を介してアップロードするときの訪問者のお金、
  5. 他の解決策で制限される大きな写真をアップロードしようとしたときの訪問者への問題と悪い経験

興味がある場合は、サイズ変更に基づいたdcollienからのこの別の回答に従うことができます。

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

その答えからわかるように、使用方法は非常に単純であり、含めるスクリプトは1つの小さなJS/ES6ファイルのみです。

この男(dcollien)はもっとメリットがあると思うので、彼の答えとこの答えに投票することをお勧めします(他の人が関連性があると思うように)

6
DavidTaubmann