当前位置: 首页 > 知识库问答 >
问题:

当我尝试将图像上载到firebase存储时,putFile在kotlin中不工作

马庆
2023-03-14

试图将映像放入firebase存储,但似乎不起作用。

我试着修改规则,确保依赖关系是正确的,并且还应用了所需的存储权限,但似乎不起作用。

下面是用于验证用户并上载其配置文件图像的代码,验证工作,但上载不起作用。

var selectedPhotoUri: Uri? = null

  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == 0 && resultCode == Activity.RESULT_OK && data != null && data.data != null) {
      // proceed and check what the selected image was....
      Log.d(TAG, "Photo was selected")

      selectedPhotoUri = data.data

      val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectedPhotoUri)

      selectphoto_imageview_register.setImageBitmap(bitmap)

      selectphoto_button_register.alpha = 0f
    }
  }

 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, "Please enter text in email/pw", Toast.LENGTH_SHORT).show()
      return
    }

    Log.d(TAG, "Attempting to create user with email: $email")

    // Firebase Authentication to create a user with email and password
    FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener {
          if (!it.isSuccessful) return@addOnCompleteListener

          // else if successful
          Log.d(TAG, "Successfully created user with uid: ${it.result!!.user.uid}")

          uploadImageToFirebaseStorage()
        }
        .addOnFailureListener{
          Log.d(TAG, "Failed to create user: ${it.message}")
          Toast.makeText(this, "Failed to create user: ${it.message}", Toast.LENGTH_SHORT).show()
        }
  }

 private fun uploadImageToFirebaseStorage() {
    if (selectedPhotoUri != null){

      val progressDialog = ProgressDialog(this)
      progressDialog.setTitle("Uploading...")
      progressDialog.show()

      val filename = UUID.randomUUID().toString()
      val ref = FirebaseStorage.getInstance().getReference("/images/$filename")
      Log.d(TAG, "this is the data $selectedPhotoUri")



      ref.putFile(selectedPhotoUri!!)
              .addOnSuccessListener {
                Log.d(TAG, "Successfully uploaded image: ${it.metadata?.path}")
                progressDialog.hide()
                ref.downloadUrl.addOnSuccessListener {
                  Log.d(TAG, "File Location: $it")

                  saveUserToFirebaseDatabase(it.toString())
                }
              }

              .addOnFailureListener {
                Log.d(TAG, "Failed to upload image to storage: ${it.message}")
              }

              .addOnProgressListener {taskSnapshot ->
                val progress = 100.0 * taskSnapshot.bytesTransferred/taskSnapshot.totalByteCount
                progressDialog.setMessage("Uploaded " +progress.toInt())

              }
    }

共有1个答案

查宜修
2023-03-14

ref是对象的引用类型。在firebase文档中,它没有名为putFile()的方法。我认为是这样的。如果要上载照片,可以使用put()代替putfile()selectedphotouri!!参数应为blob或file类型。

ref.put(selectedPhotoUri!!) //selectedPhotoUri blob or file
          .addOnSuccessListener {
            Log.d(TAG, "Successfully uploaded image: ${it.metadata?.path}")
            progressDialog.hide()
            ref.downloadUrl.addOnSuccessListener {
              Log.d(TAG, "File Location: $it")

              saveUserToFirebaseDatabase(it.toString())
            }
          }

更多详细信息

 类似资料:
  • 我是新来的Firebase存储。只是为了让我可以学习它,我试图上传图像从ImageView到Firebase存储。我的应用程序有一个按钮。当我点击按钮时,图像(从可绘制的)会显示在图像视图上,同时,图像应该在点击按钮后上传到Firebase存储。到目前为止,我已经在点击按钮时显示了图像,但是我无法将其上传到Firebase存储中。addOnFilureListener被调用(我正在检查哪一个是通过

  • 我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储,以便在需要时使用它。 现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:或,每个选项分别需要或。 我怎么能把我的,并从它获得一个或用于上传? -- 或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的? 无论

  • 我想在上传到Firebase存储之前减小图像文件大小,因为上传需要很长时间。 这是conatins编辑文本图像视图的表单 单击“保存”按钮时,我同时保存数据(在实时数据库中)和图像(存储)。 那么如何减少图像大小或压缩它呢??

  • 我试图在Firebase存储中使用Firebase上传图像,但文件不能完全上传。它只显示图像的大小9字节,下载时无法预览。 这是我使用的代码:- 我使用的反应本地图像作物选择器。我使用Firebase,但不是反应本机Firebase。请帮助!

  • 我想上传图片到存储区。每次我启动我的模拟器时,我都没有错误,而且一切都运行得很好,只是当我在模拟器中选择图片并上传它们时,即使在我刷新之后,它也不会显示在Firebase存储区中。下面是我的代码:

  • 我制作了一个用于图像和视频共享的社交应用程序。但是,加载图像需要花费太多时间。我正在使用glide图书馆。请告诉我如何在图像质量没有明显变化的情况下(如Instagram)缩小从gallery中拾取的图像的大小,然后将其上载到firebase存储。请帮忙!