사용자에게 이 개체에 액세스할 수 있는 권한이 없습니다.Firebase 스토리지 안드로이드
저는 소방서 창고가 처음입니다.단지 그것을 배울 수 있도록, 나는 버튼과 하나가 있는 간단한 앱을 만들었습니다.ImageView
버튼을 클릭하면 이미지가(from drawable)
이미지 보기에 표시됩니다.파이어베이스에 이미지를 업로드하기 위한 코드도 작성했지만 예외 메시지는onAddFailureListener
사용자에게 이 개체에 액세스할 수 있는 권한이 없습니다라는 메시지를 표시합니다.어떻게 해야 하나?
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();
}
}
여기 내 소방 기지 저장 규칙이 있습니다.
service firebase.storage {
match /b/savephoto-a1cc3.appspot.com/o {
allow read,write;
}
}
보안 규칙 업데이트match /{allPaths=**}
모든 경로에서 공용 읽기 및 쓰기 액세스가 허용됨을 나타냅니다.
service firebase.storage {
match /b/savephoto-a1cc3.appspot.com/o {
match /{allPaths=**} {
// Allow access by all users
allow read, write;
}
}
}
다양한 기본 규칙이 설명서의 예제 규칙 섹션 탭에 제공됩니다.
Firebase 콘솔에서 스토리지 규칙 변경
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
다음 단계를 수행합니다.
"스토리지"로 이동
규칙 탭을 선택하고 아래와 같이 규칙을 편집합니다.
응용 프로그램에 인증 기능이 있는 경우 다음을 사용합니다.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
응용 프로그램에 로그인 기능이 없는 경우(사용자가 스토리지에 액세스할 수 있는 경우) 다음을 사용합니다.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
저장소로 이동 -> 규칙 탭
이것을 추가합니다.
// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
[스토리지] - [규칙]으로 이동합니다.규칙을 다음과 같이 입력하고 버킷 이름을 사용자 고유의 버킷 이름으로 바꿉니다.[저장] - [파일]로 이동하여 버킷 이름을 찾을 수 있습니다.
다음과 같이 보여야 합니다. myapplication-xxxx.appspot.com
그게 당신이 필요한 전부입니다.테스트 목적으로만 인증을 수행하는 경우 인증을 사용 가능으로 설정할 필요가 없습니다.인증이 필요한 경우 나중에 추가할 수 있습니다.
파이어베이스에 있는 저장/보관 폴더로 이동하여 다음 코드를 붙여넣으십시오.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
이 문제는 방화벽 스토리지 규칙에 있습니다.로 변경
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
다음을 확인합니다.if request.auth != null
인증된 사용자만 쓰기를 허용하지만 모두가 읽습니다.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read;
allow write: if request.auth != null;
}
}
}
이 해결책들은 정말로 제 문제를 해결하지 못했습니다.
내 문제를 해결한 것은 다음과 같은 대사들입니다.
앱 모듈에서
implementation 'com.google.firebase:firebase-database:15.0.0'
implementation 'com.google.firebase:firebase-storage:15.0.0'
implementation 'com.google.firebase:firebase-auth:15.0.0'
그리고 이 코드는 업로드하고 다운로드 링크를 얻기 위한 것입니다.
private void uploadImageToFirebase(Bitmap bmp) {
try {
String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
"/news";
File dir = new File(file_path);
if (!dir.exists())
dir.mkdirs();
File file = new File(dir, "sketchpad" + "_" + ".png");
FileOutputStream fOut = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
Log.i("SECONDACTIVITY", "ADDED SUCCESSFULLY");
Uri file2 = Uri.fromFile(file);
//Now Upload
final StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference riversRef = storageRef.child(file.getName());
UploadTask uploadTask;
uploadTask = riversRef.putFile(file2);
progressDialog.show();
progressDialog.setCancelable(false);
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
progressDialog.incrementProgressBy((int) progress);
}
});
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Uri DownloadLink = taskSnapshot.getDownloadUrl();
String imgUrl = DownloadLink.toString();
FirebaseDatabase.getInstance().getReference().child("image_link").setValue(imgUrl);
}
});
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
service firebase.storage {
match /b/fir-upload-a2fa6.appspot.com/o {
match /{allPaths=**} {
// Allow access by all users
allow read, write;
}
}
}
Firebase 스토리지 오류(해결됨) 1.2에서 작업 중인 프로젝트의 파이어베이스 콘솔로 이동합니다.Firebase 콘솔의 스토리지 아래와 규칙 아래에서 service firebase.storage를 편집합니다.
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
파이어베이스에 있는 누군가에게 도움이 되기를 바라며 이 답변을 추가합니다.
"스토리지"로 이동
규칙 탭을 선택하고 아래와 같이 규칙을 편집합니다.
service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { // Allow access by all users allow read, write: if request.auth != null; } } }
참고: 프로젝트 이름에 대해 {bucket}을(를) 바꾸지 말고 위와 같이 정확히 준비해야 합니다.
Firebase 스토리지 오류(해결됨) 1.2에서 작업 중인 프로젝트의 파이어베이스 콘솔로 이동합니다.Firebase 콘솔의 스토리지 아래와 규칙 아래에서 service firebase.storage를 편집합니다.
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
참고: 이 문제를 해결하지 못한 경우에는 화력 기지 계획이 만료되었는지 확인하십시오.
timestamp.date(2023, 3, 27) 이전처럼 날짜를 timestamp.date(2023, 6, 27)로 변경했습니다.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if
request.time < timestamp.date(2023, 6, 27);
}
}
}
언급URL : https://stackoverflow.com/questions/38671444/user-does-not-have-permission-to-access-this-object-firebase-storage-android
'programing' 카테고리의 다른 글
설명 작업을 사용하여 열의 주석을 표시하는 방법 (0) | 2023.07.03 |
---|---|
매개 변수를 SQL Command로 전달하는 가장 좋은 방법은 무엇입니까? (0) | 2023.07.03 |
깃을 가지고 다시 '마스터'로 전환하는 방법은? (0) | 2023.07.03 |
최대 거리 및 MongoDB에 사용할 유닛? (0) | 2023.07.03 |
열 이름 또는 제공된 값 수가 테이블 정의와 일치하지 않습니다. (0) | 2023.07.03 |