为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Firebase 从实时数据库存储和检索图像 url?

如何使用 Firebase 从实时数据库存储和检索图像 url?

蝴蝶刀刀 2023-09-27 10:23:31
我在将图像网址存储到实时数据库中时遇到问题。它存储一个与存储中图像的 url 无关的 url。private  void uploadFile (){        if (mImageUri != null){            StorageReference fileReference = mStorageRef.child(System.currentTimeMillis()            + "." + getFileExtension(mImageUri));            uploadProgressBar.setVisibility(View.VISIBLE);            uploadProgressBar.setIndeterminate(true);            mUploadTask = fileReference.putFile(mImageUri)                    .addOnSucessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {                        @Override                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {                            Handler handler = new Handler();                            handler.postDelayed(new Runnable() {                                @Override                                public void run() {                                    uploadProgressBar.setVisibility(View.VISIBLE);                                    uploadProgressBar.setIndeterminate(false);                                    uploadProgressBar.setProgress(0);                                }                            },500);                            Toast.makeText(AddProductActivity.this, "Product is added successfully!", Toast.LENGTH_SHORT).show();                            Product product = new Product(productName.getText().toString()                                    ,productDescription.getText().toString()                                    ,price.getText().toString()                                    ,taskSnapshot.getUploadSessionUri().toString()                                    ,oldPrice.getText().toString()                        }                    })                当我从 imageUrl 字段复制存储的 url 并尝试查看它是否会显示图像时,我收到此文本错误:无效的请求。X-Goog-Upload-Command 标头丢失。
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您需要taskSnapshot.getUploadSessionUri().toString()在将图像上传到正确的 uri 时进行更改,如下所示


下面是获取正确 URI 的示例


firebaseStorageReference.putFile(resultUri)

        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

            @Override

            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                final Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();


                    firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {

                        @Override

                        public void onSuccess(Uri uri) {

                            String mDownloadUri = uri.toString();

                        }

                    });


                }

            });

并将其应用到您的代码中


private  void uploadFile (){

        if (mImageUri != null){

            StorageReference fileReference = mStorageRef.child(System.currentTimeMillis()

            + "." + getFileExtension(mImageUri));


            uploadProgressBar.setVisibility(View.VISIBLE);

            uploadProgressBar.setIndeterminate(true);


            mUploadTask = fileReference.putFile(mImageUri)

                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        @Override

                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            Handler handler = new Handler();

                            handler.postDelayed(new Runnable() {

                                @Override

                                public void run() {

                                    uploadProgressBar.setVisibility(View.VISIBLE);

                                    uploadProgressBar.setIndeterminate(false);

                                    uploadProgressBar.setProgress(0);

                                }

                            },500);



                            final Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();

                            firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {

                                @Override

                                public void onSuccess(Uri uri) {

                                    String downloadUri = uri.toString();


                                    Toast.makeText(AddProductActivity.this, "Product is added successfully!", Toast.LENGTH_SHORT).show();


                                    Product product = new Product(productName.getText().toString()

                                            ,productDescription.getText().toString()

                                            ,price.getText().toString()

                                            ,downloadUri

                                            ,oldPrice.getText().toString()

                                            , quantity.getText().toString());


                                    String uploadID = mDatabaseRef.push().getKey();

                                    mDatabaseRef.child(uploadID).setValue(product);


                                    uploadProgressBar.setVisibility(View.INVISIBLE);

                                    openMainActivity();


                                }

                            });

// rest of your code

希望对您有帮助,也欢迎更多支持


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信