【问题标题】:Unable to save image to Firebase无法将图像保存到 Firebase
【发布时间】:2018-11-20 15:25:06
【问题描述】:

在我的 android 应用程序中,我使用 Firebase 存储来保存图像,我已将安全规则设置为 null,然后我也无法上传图像并出现错误。 以下是我的错误、安全规则和 android 代码。请让我知道我在代码中做错了什么。

Logcat 错误:发生 StorageException。 用户无权访问此对象。 代码:-13021 HttpResult:403

安全规则:

service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
   allow read, write: if request.auth == null;
  }
 }
}

Java 代码:

   galleryFab.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){

                if(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){

                    ActivityCompat.requestPermissions(SetAvatar.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
                }
                else{

                    Intent i = new Intent(Intent.ACTION_PICK);
                    i.setType("image/*");
                    startActivityForResult(i,GALLERY_INTENT);
                }
            }
        }
    });

    @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent 
    data) {

    if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){

        uri = data.getData();
        cv.setImageURI(uri);
        final StorageReference filepath = sRef.child("Profile 
      Images").child(uri.getLastPathSegment());

        UploadTask uploadTask = filepath.putFile(uri);

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

       Toast.makeText(SetAvatar.this, "Upload 
                                     successful",Toast.LENGTH_SHORT).show();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

                Toast.makeText(SetAvatar.this, "Upload Failed -> " + e, 
   Toast.LENGTH_SHORT).show();

            }
        });
      }
    }

谢谢

【问题讨论】:

  • 但我无法发布图片,请您解释一下。
  • 先创建你的request.auth == true,然后再试一次
  • 我已将其更改为 true 但仍然出现错误。但我没有对用户进行身份验证。
  • 您的安全规则要求对用户进行身份验证。由于您的代码没有显示您以任何方式对用户进行身份验证,因此错误消息似乎是正确的:不允许用户写入存储位置。

标签: android firebase firebase-storage


【解决方案1】:

将您的安全规则更改为:

service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
   allow read, write;
  }
 }
}

但这会使您的存储桶被任何人修改,我不推荐这样做。但是,您可以将其用于测试目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2021-09-18
    • 2016-09-18
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多