【问题标题】:While Uploading Images to Firebase I am getting "Permission denied" error将图像上传到 Firebase 时出现“权限被拒绝”错误
【发布时间】:2018-06-13 05:16:46
【问题描述】:

我想将图像从 drawable 上传到 firebase 数据库,但出现 Permission denied 错误。我也获得了许可。我已经获取了可绘制图像的 Uri 然后上传了它,但是它给出了权限被拒绝的错误。

  private Uri mImageUri;
  private StorageReference mStorageRef;
  private DatabaseReference mDatabaseRef;

   private StorageTask mUploadTask;
   @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mImageUri = Uri.parse("android.resource://" + getPackageName() + "/" + 
  R.drawable.mobile);


    mStorageRef = FirebaseStorage.getInstance().getReference("uploads");
    mDatabaseRef = FirebaseDatabase.getInstance().getReference("uploads");
    uploadFile();
}



 private void uploadFile() {
    if (mImageUri != null) {
        StorageReference fileReference = 
          mStorageRef.child(System.currentTimeMillis()
                + "." + getFileExtension(mImageUri));

        mUploadTask = fileReference.putFile(mImageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            }
                        }, 500);

                        Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_LONG).show();
                        Upload upload = new Upload("Image",
                                taskSnapshot.getDownloadUrl().toString());
                        String uploadId = mDatabaseRef.push().getKey();
                        mDatabaseRef.child(uploadId).setValue(upload);
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

    } else {
        Toast.makeText(this, "No file selected", Toast.LENGTH_SHORT).show();
    }
}

以下是我采用的依赖项:

compile 'com.google.firebase:firebase-database:10.0.1'
testCompile 'junit:junit:4.12'
compile 'com.firebase:firebase-client-android:2.3.1'
compile 'com.google.firebase:firebase-auth:10.0.1'
compile 'com.google.firebase:firebase-storage:10.0.1'
compile 'com.android.support:multidex:1.0.0'
implementation 'com.firebase:geofire-android:2.1.1'

我收到以下错误

06-13 10:30:53.416 13173-13173/com.diyabhat.mycart W/DynamiteModule: Failed 
to load module via fast 
routecom.google.android.gms.dynamite.DynamiteModule$zza: V2 version check 
failed
06-13 10:30:53.483 13173-13198/com.diyabhat.mycart W/DynamiteModule: Failed 
to load module via fast 
routecom.google.android.gms.dynamite.DynamiteModule$zza: V2 version check 
failed
06-13 10:30:56.778 12931-12931/? E/Finsky: [1] 
com.google.android.finsky.wear.y.a(3): onConnectionFailed: 
ConnectionResult{statusCode=API_UNAVAILABLE, resolution=null, message=null}
06-13 10:31:14.434 13236-13236/? E/libmdmdetect: Failed to open 
/sys/bus/msm_subsys/devices/subsys0/name: Permission denied
06-13 10:31:14.569 13241-13241/? E/libmdmdetect: Failed to open 
/sys/bus/msm_subsys/devices/subsys0/name: Permission denied
06-13 10:31:15.576 13263-13263/? E/libmdmdetect: Failed to open 
/sys/bus/msm_subsys/devices/subsys0/name: Permission denied

【问题讨论】:

  • 检查你是否在firebase中启用了写选项
  • 是的,我已启用它。 { "规则": { ".read": true, ".write": true } }
  • 先更新您的设备 Google Play 服务或尝试使用 diff 设备

标签: android database firebase firebase-realtime-database


【解决方案1】:

更改您的 Firebase 存储规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      // Allow access by all users
      allow read, write;
    }
  }
}

确保您已在 firebase 存储目录中完成此更改,有关存储的更多规则请参阅 this 链接

【讨论】:

    【解决方案2】:

    这很可能是因为在新 Firebase 控制台中创建的项目数据库只能由使用 Firebase 身份验证登录的用户读取/写入。由于您没有通过代码让用户登录,因此数据库会拒绝您访问数据。

    目前最简单的解决方法是进入项目控制台中的“数据库”面板,选择“规则”选项卡并将内容替换为以下规则:

    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    

    这使您的新数据库对每个人都具有可读性和可写性。确保在投入生产之前再次保护您的数据库,否则有人可能会开始滥用它。

    【讨论】:

      【解决方案3】:

      我通过更改解决了我的问题

      compile 'com.google.firebase:firebase-auth:10.0.1'
      compile 'com.google.firebase:firebase-storage:10.0.1
      

       compile 'com.google.firebase:firebase-database:11.0.4'
       compile 'com.google.firebase:firebase-storage:11.0.4'
        compile 'com.google.firebase:firebase-auth:11.0.4'
      

      【讨论】:

        猜你喜欢
        • 2021-11-11
        • 2016-09-25
        • 1970-01-01
        • 2020-12-28
        • 2018-05-22
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 2015-10-01
        相关资源
        最近更新 更多