Я искал некоторые вопросы, но не могу понять, что я делаю неправильно.
Я пытаюсь загрузить файл в хранилище Firebase, а затем написать URL для загрузки внутриузел в моей базе данных.
Теперь это странная вещь, я проверяю подлинность с провайдером электронной почты и паролей, но странная вещь заключается в том, что код загружает мое изображение в хранилище, но продолжает цикл, чтобы разместитьссылка для загрузки в моей базе данных, а затем просто дает мне эту ошибку:
E / StorageException: StorageException произошла.У пользователя нет прав доступа к этому объекту.
Теперь я проверил свои правила и, так как я аутентифицирован, я попытался с этими двумя безуспешно
service firebase.storage {
match /b/my-bucket.appspot.com/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
иэтот
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Теперь я попробовал этот тоже
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if true;
}
}
}
и все еще с той же проблемой.
Это код, который я использую для загрузки файла вхранилище и поместите downloadurl в мою базу данных
public void cargarProductoFirebase(final String nombreProducto, final float precioProducto, final Dialog dialog, final ProgressDialog progressDialog, Uri filePath) {
mStorageReference.child("fotos").child(mAuth.getCurrentUser().getUid()).child(filePath.getLastPathSegment()).putFile(filePath).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
return mStorageReference.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
Map<String, Object> producto = new HashMap<>();
producto.put("nombreProducto", nombreProducto);
producto.put("precioProducto", precioProducto);
producto.put("imagen",downloadUri.toString());
mDatabase.child("Usuarios").child(mAuth.getCurrentUser().getUid()).child("productos").push().updateChildren(producto).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
dialog.dismiss();
progressDialog.dismiss();
Toast.makeText(mContext, "Se cargo el producto correctamente.", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(mContext, "Error al cargar el producto" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(mContext, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
Stacktrace ошибки
2018-10-09 20: 32: 49.442 9767-9821 / com.example.macbook.firebasemvp E / StorageException: возникла исключительная ситуация StorageException.У пользователя нет прав доступа к этому объекту.Код: -13021 HttpResult: 403 2018-10-09 20: 32: 49.443 9767-9821 / com.example.macbook.firebasemvp E / StorageException: {"error": {"code": 403, "message": "Developerтребуется учетные данные. "}} java.io.IOException: {"error": {"code": 403, "message": "Требуются учетные данные разработчика."}} на com.google.firebase.storage.obfuscated.zzj.zza (com.google.firebase: firebase-storage @@ 16.0.2: 455) на com.google.firebase.storage.obfuscated.zzj.zza (com.google.firebase: firebase-storage @@ 16.0.2: 3435) на com.google.firebase.storage.obfuscated.zzc.zza (com.google.firebase: firebase-storage @@ 16.0.2: 65) на com.google.firebase.storage.obfuscated.zzc.zza (com.google.firebase: firebase-storage @@ 16.0.2: 57) на com.google.firebase.storage.zzc.run (com.google.firebase: firebase-storage @@ 16.0.2: 68) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:636g) в java.6lang..Thread.run (Thread.java:764)
Файл также загружен в нужное место, но ошибка продолжает возникать и не может поместить этот загрузочный файл в базу данных
![enter image description here](https://i.stack.imgur.com/XNFsF.png)
Редактировать
Я сократил код и удалил часть базы данных, и все та же проблема
public void cargarProductoFirebase(final String nombreProducto, final float precioProducto, final Dialog dialog, final ProgressDialog progressDialog, Uri filePath) {
mStorageReference.child("fotos").child(mAuth.getCurrentUser().getUid()).child(filePath.getLastPathSegment()).putFile(filePath).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
return mStorageReference.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
Log.e(TAG, "onComplete: Success " );
} else {
Toast.makeText(mContext, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
Изображение:
![enter image description here](https://i.stack.imgur.com/KUYo1.png)
Кроме того, нет addOnProgressUpdate
, как в старой реализации хранилища?