【问题标题】:how to add multiple images into firebase database如何将多个图像添加到firebase数据库中
【发布时间】:2020-02-06 17:14:51
【问题描述】:

如何将多个图像添加到 Firebase 实时数据库中

我的代码

private void uploadProductToFirebase() {

        final StorageReference imageFilePath = ProductImagesRef;

        for (int uploadCount = 0; uploadCount<ImageList.size(); uploadCount++){
            Uri IndividualImage= ImageList.get(uploadCount);
            final StorageReference ImageName = imageFilePath.child(pname);
            final int finalUploadCount = uploadCount;
            ImageName.putFile(IndividualImage).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    ImageName.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String url = String.valueOf(uri);
                            DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("ProductImages").child(productkey);
                            Product product = new Product();
                            if (finalUploadCount == 0){
                                product.setImage1(url);
                            }
                            else if (finalUploadCount == 1){
                                product.setImage2(url);
                            }
                            else if (finalUploadCount == 2){
                                product.setImage3(url);
                            }
                            databaseReference.setValue(product);
                        }
                    });
                }
            });
        }
    }    

如果我添加这三个图像,则只有第三个图像存储到数据库中。

我应该进行哪些更改才能将 3 张图片上传到 Firebase 存储和 Firebase 实时数据库?

【问题讨论】:

  • 实际上它会覆盖前一个,因为您的imageFilePath 保持不变。你能解释一下你想要什么吗?
  • 我希望将所有三个图像都上传到 firebase 实时数据库

标签: java android firebase firebase-storage


【解决方案1】:

建议

我会测试以下代码,看看问题是否出在您的 Product 类上。

String url = String.valueOf(uri);
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("ProductImages").child("1234");
Product product = new Product();
if (finalUploadCount == 0){
 databaseReference.child("image_1").setValue(url);
}
else if (finalUploadCount == 1){
   databaseReference.child("image_2").setValue(url);
}
else if (finalUploadCount == 2){
   databaseReference.child("image_3").setValue(url);
}

您可能只保存了最后一个 Firebase 存储。检查 Firebase 存储是否正在创建映像,如果是,这可能是在线问题:

 databaseReference.setValue(product);

另外,还有一个我在 Kotlin 中实现的工作示例。

它从用户库中获取一些图像并上传到 Firebase 存储,然后将 Firebase 存储引用存储到我的实时数据库。

所以我的建议是让您尝试使用 Bitmap,然后执行一项任务将其上传到 Firebase 存储。您可能会考虑在上传之前压缩您的图像,以免占用您所有的存储空间(如果不这样做可能会变得昂贵)

Kotlin 示例

private fun handleImageUpload() {
        val filePath : StorageReference = FirebaseStorage.getInstance().reference.child("user_image").child(mAuth.currentUser!!.uid)

        var  bitmap: Bitmap? = null

        try {
            bitmap = MediaStore.Images.Media.getBitmap(application.contentResolver, resultUri)
        } catch (e : IOException) {
            e.printStackTrace()
        }

        val boas = ByteArrayOutputStream()
        bitmap!!.compress(Bitmap.CompressFormat.JPEG, 20, boas)
        val data = boas.toByteArray()
        val uploadTask = filePath.putBytes(data)

        uploadTask.continueWithTask { task ->
            if (!task.isSuccessful) {
                task.exception?.let {
                    throw it
                }
            }
            filePath.downloadUrl
        }.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val downloadUri = task.result
                val newImage = HashMap<String, Any>()
                newImage.put("profileImageUrl", downloadUri.toString())
                mCustomerDatabase.updateChildren(newImage)
            } else {
                // Handle failures
                // ...
            }
        }
    }

Java 示例

https://github.com/jirawatee/FirebaseStorage-Android/blob/master/app/src/main/java/com/example/storage/UploadActivity.java

【讨论】:

  • 你能提供一个更自信的部分吗?你试过我提到的代码了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2019-02-13
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2021-12-09
  • 2021-02-20
相关资源
最近更新 更多