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(); } }
3 Réponses :
<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"/>
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(); } }
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.
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