2016-07-30 15 views
5

Tôi mới sử dụng bộ nhớ Firebase. Để tôi có thể tìm hiểu, tôi đã tạo một ứng dụng đơn giản có nút và ImageView. Khi tôi bấm vào nút, một hình ảnh (from drawable) được hiển thị trên ImageView. Tôi cũng đã viết mã để tải lên hình ảnh trên Firebase, nhưng thông báo ngoại lệ của onAddFailureListener cung cấp thông báo Người dùng không được phép truy cập đối tượng này. Tôi nên làm gì?Người dùng không được phép truy cập đối tượng này. Bộ nhớ Firebase android

package com.example.asad.save_photo; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.net.Uri; 
import android.os.Environment; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnFailureListener; 
import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageMetadata; 
import com.google.firebase.storage.StorageReference; 
import com.google.firebase.storage.UploadTask; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     FirebaseStorage storage = FirebaseStorage.getInstance(); 

     StorageReference storageRef = storage.getReferenceFromUrl("gs://savephoto-a1cc3.appspot.com"); 

     final StorageReference mountainsRef = storageRef.child("asad"); 

     Button butt = (Button) findViewById(R.id.button); 


     butt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       ImageView imageView = (ImageView) findViewById(R.id.image); 
       imageView.setImageResource(R.drawable.back2); 
       //imageView.setImageResource(R.drawable.back2); 

       imageView.setDrawingCacheEnabled(true); 
       imageView.buildDrawingCache(); 
       Bitmap bitmap = imageView.getDrawingCache(); 


       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
       final byte[] data = baos.toByteArray(); 

       UploadTask uploadTask = mountainsRef.putBytes(data); 
       uploadTask.addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception exception) { 
         // Handle unsuccessful uploads 
         showToast(exception.getMessage()); 
        } 
       }); 
         uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
        @Override 
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
         // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
         //Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
         showToast("success !!!!!"); 
        } 
       }); 


      } 
     }); 

    } 

    public void showToast(String s) { 
     Toast.makeText(this,s,Toast.LENGTH_LONG).show(); 
    } 
} 

Dưới đây là quy tắc bảo quản căn cứ hỏa lực của tôi

service firebase.storage { 
    match /b/savephoto-a1cc3.appspot.com/o { 
    allow read,write; 
    } 
} 
+0

phiên bản hệ điều hành của bạn là 6.0? nếu có thì xin phép thời gian chạy từ http://stackoverflow.com/questions/38141523/directory-creation-not-working-in-marshmallow-android/38141778#38141778 –

+0

Không. Phiên bản hệ điều hành của tôi là 4.2 – ashay

+0

Bạn có thêm quyền trong tệp kê khai không? –

Trả lời

13

Cập nhật quy tắc bảo mật của bạn với match /{allPaths=**} để cho biết rằng công chúng đọc và viết được phép truy cập vào tất cả các con đường:

service firebase.storage { 
    match /b/savephoto-a1cc3.appspot.com/o { 
    match /{allPaths=**} { 
     // Allow access by all users 
     allow read, write; 
    } 
    } 
} 

quy tắc mặc định khác nhau được cung cấp trong các tab của phần Sample Rules của tài liệu.

+1

bạn thêm địa chỉ này ở đâu? –

+0

@rosualin: Tại [Bảng điều khiển Firebase] (https://console.firebase.google.com/) cho dự án của bạn –

2

Thay đổi quy tắc lưu trữ của bạn trong giao diện điều khiển căn cứ hỏa lực

enter image description here

service firebase.storage { 
    match /b/{bucket}/o { 
    match /{allPaths=**} { 
     allow read, write: if request.auth != null; 
    } 
    } 
} 
Các vấn đề liên quan