Kotlin - 无法将图像上传到 Firebase 存储
Posted
技术标签:
【中文标题】Kotlin - 无法将图像上传到 Firebase 存储【英文标题】:Kotlin - Cant upload an image to firebase storage 【发布时间】:2021-09-18 00:13:33 【问题描述】:我正在尝试将图像从本地存储上传到 Firebase 存储。 我正在使用它的 URI 上传图片
package com.example.demochat
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.storage.FirebaseStorage
import java.util.*
class RegisterActivity : AppCompatActivity()
private lateinit var username: EditText
private lateinit var email: EditText
private lateinit var password: EditText
private lateinit var register: Button
private lateinit var haveAccount: TextView
private lateinit var imageInsert: Button
private lateinit var imageView: ImageView
private val tag: String = "RegisterActivity"
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
username = findViewById(R.id.editTextUsername)
email = findViewById(R.id.editTextTextEmailAddress)
password = findViewById(R.id.editTextTextPassword)
register = findViewById(R.id.buttonRegister)
haveAccount = findViewById(R.id.textViewAlready_have_an_account)
imageInsert = findViewById(R.id.buttonInsertImage)
imageView = findViewById(R.id.imageViewImageInsert)
imageInsert.setOnClickListener
selectImage()
register.setOnClickListener
performRegister()
haveAccount.setOnClickListener
val intent = Intent(this@RegisterActivity, LoginActivity::class.java)
startActivity(intent)
private var selectedPhotoUri: Uri? = null
private fun selectImage()
Log.d(tag, "clicked image button")
val intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(intent, 100)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 100 && resultCode == RESULT_OK && data != null && data.data != null)
Toast.makeText(this@RegisterActivity, "clicked image selected", Toast.LENGTH_SHORT)
.show()
val selectedPhotoUri = data.data
Toast.makeText(this@RegisterActivity, "$selectedPhotoUri", Toast.LENGTH_SHORT).show()
imageView.setImageURI(selectedPhotoUri)
private fun performRegister()
if (email.text.isEmpty() || password.text.isEmpty())
Toast.makeText(this, "Fill the above details", Toast.LENGTH_SHORT).show()
return
FirebaseAuth.getInstance()
.createUserWithEmailAndPassword(email.text.toString(), password.text.toString())
.addOnCompleteListener
if (!it.isSuccessful) return@addOnCompleteListener
Log.d(tag, "uid = $it.result?.user?.uid")
uploadImageToFirebase()
.addOnFailureListener
Toast.makeText(this, "$it.message", Toast.LENGTH_SHORT).show()
Log.d(tag, "$it.message")
private fun uploadImageToFirebase()
if (selectedPhotoUri == null) return
val fileName = UUID.randomUUID().toString() + ".jpg"
val refStorage = FirebaseStorage.getInstance().reference.child("/images/$fileName")
refStorage.putFile(selectedPhotoUri!!)
.addOnSuccessListener
Log.d(tag, "image uploaded")
.addOnFailureListener
Log.d("RegisterActivity", "$it.message")
以下是 Firebase 存储的规则
rules_version = '2';
service firebase.storage
match /b/bucket/o
match /allPaths=**
allow read, write;
firebase 身份验证部分工作正常,已成功添加用户。但我无法上传图片。我在清单文件中包含了互联网权限。 而且我没有收到任何错误消息 所以,请帮忙
【问题讨论】:
但我无法上传图片。没有提供足够的信息,因此我们可以提供帮助。这段代码中究竟有什么不能按您期望的方式工作?告诉我们共享代码有什么问题。你有什么错误吗? 代码不会将图像上传到 Firebase 存储。并且代码没有错误。 在继续之前,请花点时间阅读How do I ask a good question?。 我的逻辑错了吗??或者我说的方法是错误的 对不起,先生,浪费您的时间了。 【参考方案1】:这里: val selectedPhotoUri = data.data 您不是重新分配全局属性 selectedPhotoUri,而是创建一个新属性。
然后,这里: if (selectedPhotoUri == null) 返回 您正在检查始终为空的全局属性。
【讨论】:
以上是关于Kotlin - 无法将图像上传到 Firebase 存储的主要内容,如果未能解决你的问题,请参考以下文章
将图像上传到 Firebase 存储后如何获取图像 uri?
使用 kotlin for android app 将 pdf 文件上传到 firebase 存储