如何在Firebase Storage v16.0.1中获取上载图像的url

时间:2019-03-04 04:10:22

标签: android firebase firebase-storage

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

我想要此功能,以便最终用户能够连同标题,日期,备注等用户输入一起看到带有链接的“图像”子项和其他输入

我曾尝试在StackOverflow和Youtube上搜索答案,但其中大多数都已过时并且看起来已经过时。有一个命令getDownloadUrl,但我认为它已被弃用。

这是我班上的代码,它将我的图像上传到Firebase Storage。在何处添加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+"%");
                    }
                });
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以尝试这种方式。

  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
                // ...
            }
        }