如何在将图像上传到Firebase后获取图像URL?

问题描述:

我正在制作一个用户在Firebase存储上上传图片的应用程序。上传图片后,我想将图片的网址和其他详细信息上传到我自己的API中。我怎样才能得到用户刚刚上传的图像的Uri。 This教程教导如何做上传,但不显示如何获取图像URL。我尝试了所有的教程,但没有显示我想要的东西。如何在将图像上传到Firebase后获取图像URL?

根据the documentation,您可以拨打.getDownloadUrl中的.onSuccessListener来获取图片网址。

下面是从文档的例子:

// Get the data from an ImageView as bytes 
imageView.setDrawingCacheEnabled(true); 
imageView.buildDrawingCache(); 
Bitmap bitmap = imageView.getDrawingCache(); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
byte[] data = baos.toByteArray(); 

UploadTask uploadTask = mountainsRef.putBytes(data); 
uploadTask.addOnFailureListener(new OnFailureListener() { 
    @Override 
    public void onFailure(@NonNull Exception exception) { 
     // Handle unsuccessful uploads 
    } 
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
    @Override 
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
     // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
     Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
    } 
}); 
+0

谢谢仁。 Firebase存储是否适用于上传应用程序的图像,该应用程序每天会在性能和可用性方面使用该Url上传20-50个图像和1000-5000个图像? –

+0

Firebase是该场景的可行解决方案。请记住,这样的数量可能会超过免费级别。点击此处了解更多关于定价的信息:https://firebase.google.com/pricing/ 如果我的回答有帮助,请接受它。谢谢! –

+0

另外仁,如果我有一个谷歌高级帐户,那么随着音量的增加,我可以免费使用Firebase服务吗? –

您将获得的回调的onSuccess的下载网址。检查以下代码

public static void storeInFirebase(Context context, Uri uri, String type) { 

StorageReference riversRef = null; 
        mStorageRef = FirebaseStorage.getInstance().getReference(); 
        //to create a separate folder with all the pictures uploaded 
     riversRef = mStorageRef.child("pictures/" + "unique_value"); 

        UploadTask uploadTask = riversRef.putFile(uri); 
        uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       DialogUtils.dismissProgressDialog(); 
       // Handle unsuccessful uploads 
      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
       downloadUrl = taskSnapshot.getDownloadUrl(); 
       Log.d("downloadUrl", "" + downloadUrl); 

      } 
     }); 
       }