1
votes

Impossible de récupérer l'URL de téléchargement de l'image à partir de Firebase Storage (obtention d'une exception) [AIDE URGENTE BESOIN]

Le code télécharge avec succès une image sur Firebase Storage mais ne renvoie pas l'URL de téléchargement. Comment puis-je résoudre ce problème?

J'obtiens cette exception: java.lang.IllegalArgumentException: getDownloadUrl () n'est pas pris en charge à la racine du bucket. Pourquoi?

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

        fileReference.putFile(mImageUri).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();
                }

                // Continue with the task to get the download URL
                return mStorageRef.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                        System.out.println("Upload success: " + downloadUri);
                } else {
                    // Handle failures
                    // ...
                }
            }
        });

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

}


8 commentaires

où obtenez-vous l'erreur, en xml?


où essayez-vous de le trouver


stackoverflow.com/a/39120615/2219208


Comment essayez-vous d'ajouter?


avec l'attribut @Style?


Qu'est-ce que vous essayez d'accomplir réellement?


quelle est la version de lib appcompat dans votre application


J'ai aussi essayé beaucoup de choses, sans androidx, j'ai également utilisé l'ancien, mais je n'ai rien trouvé, peut-être que le type du tutoriel a créé ce style par lui-même, je vous suggère de sauter cette partie ou d'essayer de créer le vôtre


3 Réponses :


-5
votes
<style name="Widget.Material.TextView.ListSeparator" parent="Widget.TextView.ListSeparator">
    <item name="background">@drawable/list_section_divider_material</item>
    <item name="textAllCaps">true</item>

 - </style>

<style name="Widget.Material.Light.TextView.ListSeparator" parent="Widget.Material.TextView.ListSeparator"/>

0 commentaires

0
votes

Je pense qu'il y a un problème lors du renvoi de l'URL de téléchargement, essayez le code ci-dessous:

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

        fileReference.putFile(mImageUri).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();
                }

                // Continue with the task to get the download URL
                //change made here
                return fileReference.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                        System.out.println("Upload success: " + downloadUri);
                } else {
                    // Handle failures
                    // ...
                }
            }
        });

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

}


0 commentaires

0
votes

J'ai donc le même problème. J'avais un code que j'utilise depuis deux ans mais quelque chose semble avoir changé dans Firebase. Ci-dessous est un nouveau code qui fonctionne et résout ces problèmes. Ps: C'est dans kotlin mais vous pouvez avoir un exemple d'Android dans le lien de référence et simplement ajuster mon code.

Déclarez d'abord une variable globale private lateinit var filePath: Uri

Ensuite, placez votre image dans ce fichier uri.

puis allez au code où vous voulez faire le téléchargement:

    mFireBaseStorage = FirebaseStorage.getInstance()
    mphotoStorageReference = mFireBaseStorage.reference  //storage references

    val storageRef = mphotoStorageReference.child("usuarios_img")  //path in storage. This is the folder name in storage

    val bmp: Bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath)
    val baos: ByteArrayOutputStream = ByteArrayOutputStream()
    bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos) //choose compreess rate (100 means no compression)

    //get the uri from the bitmap
    val tempUri: Uri = getImageUri(this, bmp)
    //transform the new compressed bmp in filepath uri
    filePath = tempUri  //filePath is a global variable Uri


   
   var uploadTask = storageRef.child("the_name_of_the_file).putFile(filePath)

    // [START upload_get_download_url]
    val ref = storageRef
    uploadTask = ref.putFile(filePath)

    val urlTask = uploadTask.continueWithTask { task ->
        if (!task.isSuccessful) {
            task.exception?.let {
                throw it
            }
        }
        ref.downloadUrl
    }.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val downloadUri = task.result
            Log.d("test", "worked, this is the url link "+downloadUri)
            
           
        } else {
            // Handle failures
            Log.d("test", "error")

        }
    }

C'est tout.

Référence https://firebase.google.com/docs/ storage / android / upload-files? hl = pt-br

J'espère que cela vous aidera car j'y ai perdu quelques heures.


0 commentaires