当前位置: 首页 > 知识库问答 >
问题:

Firebase storage -限制用户上传到Firebase storage的图像大小

松思源
2023-03-14

我是一个新的firebase开发人员。我正在开发一个android应用程序,让用户上传图像到firebase存储。因为我使用的是火花模式,所以我只有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();
                        }
                    })

你知道如何解决这个问题吗?

共有3个答案

高英彦
2023-03-14

可能会迟到,但可以帮助另一个新手:-)你可以这样使用字节来减少上传的大小:

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);
岳谦
2023-03-14

如果您的目标不一定是限制用户,而是将图像保持在较小的尺寸,那么您可以使用JavaScript在客户端更好地调整图像的大小。

这对我们来说是完美的解决方案,节省了:

    < li >我们托管的空间, < li >托管空间的费用, < li >上传期间访问者的时间(通常少10倍以上), < li >访问者通过移动有限带宽上传时的费用, < li >试图上传大照片时给访问者带来的问题和不好的体验,我们会用其他解决方案来限制这些问题和体验

如果你感兴趣,你可以看看dcollien的另一个回答,在这个回答中我们给出了调整大小的依据:

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

正如人们在该答案中看到的那样,使用方法非常简单,要包含的脚本只有一个小的JS / ES6文件。

我相信这个家伙(dcollien)值得更多的优点,所以我建议你给他的答案和这个答案投票(这样其他人就可以发现它是相关的)。

支彭亮
2023-03-14

根据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
    }
  }
}
 类似资料:
  • 我无法上载firebase存储上的配置文件图像。我正在把烤面包片上的错误打印出来。为什么会出现这种情况?我无法解决这个问题,我审查了我的代码很多次。问题可能是什么?我如何调整我的代码以使其正常工作?提前向大家表示感谢。

  • 问题内容: 当我尝试删除目录时,FirebaseStorage始终返回错误,即类似以下内容始终返回错误。 但是,删除文件可以正常工作,例如不会返回错误: 我在这里可能做错了什么?我不认为FirebaseStorage不支持它,因为从目录中一个接一个地删除文件会很la脚(特别是如果所述目录有100或1000个这样的目录)。 问题答案: 从Google网上论坛删除目录是不可能的。您必须在某个位置(在F

  • 问题内容: 我正在尝试将调整大小的图像上传到S3: 但我得到一个错误: 问题答案: 您需要先将输出图像转换为一组字节,然后才能上载到s3。您可以将图像写入文件然后上传文件,也可以使用cStringIO对象来避免写入磁盘,就像我在这里所做的那样:

  • 问题内容: 我在Django应用中有一个表单,用户可以在其中上传文件。 如何设置上传文件大小的限制,以便如果用户上传的文件大于我的限制,则该表格将无效并且会引发错误? 问题答案: 此代码可能会帮助:

  • 在Michael Hartl的The Rails教程第11章的结尾,我通过创建存储桶、使用IAM设置用户并授予用户Amazon S3FullAccess策略,成功地启用了用户上传到Amazon S3服务。允许我网站上的未知用户完全访问存储桶以在我的网站上上传图像,这感觉很脏而且非常不安全,我不确定我是否应该有这种感觉。我在 http://awspolicygen.s3.amazonaws.com/

  • 有没有通过HTTP将图像上传到Google App Engine(Python)的例子?此外,是否可以从Blob存储中检索图像并将图像链接共享给其他人?