【问题标题】:Trying to upload image to firebase storage尝试将图像上传到 Firebase 存储
【发布时间】:2019-12-18 12:49:32
【问题描述】:

尝试将图片上传到 Firebase 存储, 已经添加了依赖项,存储是公开的,logcat 中没有错误, 用户身份验证完美运行

 private fun performRegister() {
        val email = email_edittext_register.text.toString()
        val password = password_edittext_register.text.toString()

        if (email.isEmpty() || password.isEmpty()) {
            Toast.makeText(this, "Fill fields", Toast.LENGTH_SHORT).show()
            return
        }
        Log.d("RegisterActivity", "email is " + email)
        Log.d("RegisterActivity", "password is $password")
        FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener {
                if (!it.isSuccessful) return@addOnCompleteListener

                Log.d("RegisterActivity", "Succesfully created user with uid: ${it.result?.user?.uid}")
            }
            .addOnFailureListener {
                Log.d("RegisterActivity", "Faild to create user ${it.message}")
                Toast.makeText(this, "Faild to create user ${it.message}", Toast.LENGTH_SHORT).show()

            }
    }
    private fun uploadImageToFirebaseStorage(){
        if(SelectedPhotoUri==null)return
        val filename=UUID.randomUUID().toString()
        val ref=FirebaseStorage.getInstance().getReference("/images/$filename")
        ref.putFile(SelectedPhotoUri!!)
            .addOnSuccessListener {
                Log.d("Register","succesfuly uploaded image: ${it.metadata?.path}")
            }
    }

logcat 中没有错误

【问题讨论】:

  • 请在您的uploadImageToFirebaseStorage 被调用的地方发布完整的活动。
  • FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) .addOnCompleteListener { if (!it.isSuccessful) return@addOnCompleteListener Log.d("RegisterActivity", "使用 uid 成功创建用户:${ it.result?.user?.uid}") uploadImageToFirebaseStorage() }

标签: android firebase kotlin firebase-storage


【解决方案1】:

获取结果的图像 URI 启动活动。它将打开一个图像选择器:

val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "image/jpeg"
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true)
startActivityForResult(
   Intent.createChooser(intent, "Complete action using"),
   RC_PHOTO_PICKER
)

在 onActivityResult 检查它是否来自您的图像选择器。

if (requestCode == RC_PHOTO_PICKER && resultCode == Activity.RESULT_OK) {
            pushPicture(data)
}

以及最后将图像推送到 Firebase 存储的方法:

    fun pushPicture(data: Intent?) {
        val selectedImageUri = data!!.data
        val imgageIdInStorage = selectedImageUri!!.lastPathSegment!! //here you can set whatever Id you need
        storageReference.child(imgageIdInStorage).putFile(selectedImageUri)
            .addOnSuccessListener { taskSnapshot ->
                val urlTask = taskSnapshot.storage.downloadUrl
                urlTask.addOnSuccessListener { uri ->
                    //do sth with uri
                }
            }
    }

【讨论】:

  • 请给他一些解释你如何接收数据以及selectedImageUri!!.lastPathSegment!!是什么。
  • @Ashish 不一定非得是selectedImageUri!!.lastPathSegment!!,是一个存储子id,你可以设置任何你想要的id。
猜你喜欢
  • 2022-01-08
  • 2023-02-24
  • 2018-03-04
  • 2017-09-25
相关资源
最近更新 更多