Ошибка Firebase Storage при попытке вставить данные в мою базу данных - PullRequest
0 голосов
/ 10 октября 2018

Я искал некоторые вопросы, но не могу понять, что я делаю неправильно.

Я пытаюсь загрузить файл в хранилище 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

Редактировать

Я сократил код и удалил часть базы данных, и все та же проблема

 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

Кроме того, нет addOnProgressUpdate, как в старой реализации хранилища?

1 Ответ

0 голосов
/ 10 октября 2018

Проблема вызвана вашим звонком на getDownloadUrl():

return mStorageReference.getDownloadUrl();

Я предполагаю, что mStorageReference указывает на корень вашего хранилища Cloud Storage, поэтому вы запрашиваете URL для загрузкивсего ведра, что не разрешено.

Чтобы решить эту проблему, как и для URL-адреса загрузки StorageReference, который вы на самом деле написали:

StorageReference fileReference = mStorageReference.child("fotos").child(mAuth.getCurrentUser().getUid()).child(filePath.getLastPathSegment())
fileReference.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 fileReference.getDownloadUrl();
    }
    ...

Кстати: я нашел этопутем поиска «Требуются учетные данные разработчика» в сообщении об ошибке] (https://www.google.com/search?q=firebase+storage+"Developer+credentials+required").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...