kotlin 从firebase存储区上传图像URL到firebase数据库时出现错误

zf2sa74q  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(182)

我在火力基地得到了这个:

private fun uploadToFireBase(imageUri: Uri) {
    binding.progressBar.visibility = View.VISIBLE
    val fileRef : StorageReference = storageReference.child("${System.currentTimeMillis()}.${getFileExtension(imageUri)}")
    fileRef.putFile(imageUri).addOnSuccessListener {

        fileRef.downloadUrl.addOnSuccessListener {
            binding.progressBar.visibility = View.VISIBLE

            val hackathonModel = HackathonModel(binding.HackTitleET.text.toString() , binding.HackUrlET.text.toString() ,
                binding.HackLocationET.text.toString(), imageUri.toString()
            )

            val hackathonModelId : String? = root.push().key
            root.child("HackathonsUsers").child(firebaseAuth.currentUser!!.uid).child(hackathonModelId.toString()).setValue(hackathonModel)
            root.child("AllHackathons").child(hackathonModelId.toString()).setValue(hackathonModel)

            Toast.makeText(this, "Hackathon Uploaded Successfully", Toast.LENGTH_SHORT).show()
            val intent = Intent(this , MainActivity::class.java)
            startActivity(intent)
            finish()
        }

    }.addOnProgressListener {
        binding.progressBar.visibility = View.VISIBLE
    }.addOnFailureListener{
        binding.progressBar.visibility = View.INVISIBLE
        binding.postHackBT.visibility= View.VISIBLE
        Toast.makeText(this, "Uploading Failed", Toast.LENGTH_SHORT).show()
    }
}

private fun getFileExtension(imageUri: Uri): String? {
    val cr : ContentResolver = contentResolver
    val mime : MimeTypeMap = MimeTypeMap.getSingleton()
    return mime.getExtensionFromMimeType(cr.getType(imageUri))
}

如何修复这个错误,并获得一个链接在正确的形式,而不是在这种形式(content://com.android.providers.media.documents/document/image%3A428613)?

xwbd5t1u

xwbd5t1u1#

您正在使用以下项创建模型:

val hackathonModel = HackathonModel(binding.HackTitleET.text.toString() , binding.HackUrlET.text.toString() ,
    binding.HackLocationET.text.toString(), imageUri.toString()
)

最后一个参数是imageUri.toString(),它是本地Android设备上的映像路径,而不是您让Firebase为您生成的下载URL。
要获得后者:

fileRef.downloadUrl.addOnSuccessListener { task ->
    binding.progressBar.visibility = View.VISIBLE

    if (task.isSuccessful) {
        val downloadUri = task.result

        val hackathonModel = HackathonModel(binding.HackTitleET.text.toString() , binding.HackUrlET.text.toString() ,
            binding.HackLocationET.text.toString(), downloadUri.toString()
        )
        ...

另请参阅Firebase文档,了解如何在上载文件后获取下载URL。

相关问题