将图像上传至firebase存储器(Kotlin)

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

要检索图库中的图像,大多数教程都会介绍

startActivityForResult()

代码块确实返回了一个URI,但是,当我使用该URI设置图像或上传到firebase存储时,它不起作用。
图像获取和上传流程:

  • 单击个人资料图片
  • 从文件存储或多媒体资料中选择
  • 选择后,它将自动在视图中设置图像,并将其上传到与当前登录用户的授权ID相关联的firebase存储。

我在一个片段中有这样的话:
第一次
而这是上传到firebase的代码:

private val storageRef = Firebase.storage.reference

fun uploadImage(path: Uri?){
    val file = Uri.fromFile(File(path?.path!!))
    storageRef.child("images/${UUID.randomUUID()}").putFile(file)
}

我想我遗漏了一些东西。
谢谢你的帮助。

mctunoxg

mctunoxg1#

我找到解决办法了!
对于registerActivity,我使用了照片选择器支持库链接
我还添加了文档中讨论的依赖项implementation 'androidx.activity:activity-ktx:1.6.1'
对于上传到firebase,我想我只是对File类和Uri的用法感到困惑。我本可以一开始就传递Uri,我可能是对新的关键字(File和Uri)感到困惑,然后跳转到副本粘贴代码。
这是我得到的代码:
我已经将registerForActivityResult代码移到onCreate()之外,并且只是Fragment类的一个子类。

private val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        binding.ivProfilePic.setImageURI(uri)
        sharedViewModel.uploadImage(uri)
    } else {
        // insert code for toast showing no media selected
    }
}

在onViewCreated()上:

binding.ivProfilePic.setOnClickListener{
pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}

上传至firebase:
我刚刚通过了URI

fun uploadImage(path: Uri){
        storageRef.child("images/${UUID.randomUUID()}").putFile(path)
            .addOnSuccessListener {
                // Display upload complete
            }
    }

谢谢你的帮助

相关问题