首页 > 解决方案 > 如何在firebase storage v16.0.1中获取上传图片的url

问题描述

我已经成功地将图像发布到 Firebase 存储,但我想知道是否可以在 Firebase 数据库中有一个链接/url,我可以从中单击将我重定向到 Firebase 存储以查看该图像。

我想要这个功能,以便与标题、日期、备注等用户输入一起,最终用户将能够看到带有链接的“图像”子项以及其他输入

我曾尝试在 StackOverflow 和 Youtube 上搜索答案,但它们中的大多数都是旧的并且似乎已经过时了。有一个 command getDownloadUrl,但我相信它已被弃用。

这是我的课程中将我的图像上传到 Firebase 存储的代码。在哪里添加storagerefernce.downloadUrl()

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();
    btnChoose = (ImageButton) findViewById(R.id.btnChoose);

    imageView = (ImageView) findViewById(R.id.imgView);
    btnChoose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) 
        {
            chooseImage();
        }
    });


}
public void chooseImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),PICK_IMAGE_REQUEST);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null )
    {
        filePath = data.getData();
        imgname = filePath.getLastPathSegment();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            imageView.setImageBitmap(bitmap);
            uploadImage();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

private void uploadImage()
{

    if(filePath != null)
    {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();

        StorageReference ref = storageReference.child("images/"+ imgname);
        ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        progressDialog.dismiss();
                        Toast.makeText(MainActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialog.dismiss();
                        Toast.makeText(MainActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
                                .getTotalByteCount());
                        progressDialog.setMessage("Uploaded "+(int)progress+"%");
                    }
                });
        }
    }
}

标签: androidfirebasefirebase-storage

解决方案


你可以试试这个方法。

  val ref = mStorageReference?.child("images/mMobileNumber.jpg")
        val  uploadTask = ref?.putFile(Uri.fromFile(File(mImagePath)))

        uploadTask?.continueWithTask(Continuation<UploadTask.TaskSnapshot, Task<Uri>>
        { task ->
            if (!task.isSuccessful) {
                task.exception?.let {
                    throw it
                }
            }
            return@Continuation ref.downloadUrl
        })?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val downloadUri = task.result
                mTempDatabaseReference?.child("image")?.setValue(downloadUri.toString())
            } else {
                // Handle failures
                // ...
            }
        }

推荐阅读