【问题标题】:How to Get Image URL after uploading an image form android to Firebase?将图像从 android 上传到 Firebase 后如何获取图像 URL?
【发布时间】:2017-11-24 23:31:48
【问题描述】:

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

【问题讨论】:

    标签: android image firebase firebase-storage


    【解决方案1】:

    根据the documentation,可以在.onSuccessListener中调用.getDownloadUrl获取图片URL。

    这是文档中的示例:

    // 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();
        }
    });
    

    【讨论】:

    • 谢谢仁。就性能和可行性而言,Firebase 存储是否适合为每天使用该 Url 上传 20-50 张图片和 1000-5000 张图片的应用上传图片?
    • Firebase 是该场景的可行解决方案。请记住,这样的数量可能会超过免费层。在此处了解有关定价的更多信息:firebase.google.com/pricing 如果我的回答有帮助,请接受。谢谢!
    • 还有 Jen,如果我有一个 google 高级帐户,那么随着数量的增加,我可以免费使用 firebase 服务吗?
    • 好问题!老实说,我对定价了解不多。在此处查看常见问题解答:firebase.google.com/support/faq/#pricing 或在此处查看帐户服务支持:firebase.google.com/support/contact/account-services
    【解决方案2】:

    您将在 onSuccess 回调中获得下载 URL。检查以下代码

    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);
    
                }
            });
                    }
    

    【讨论】:

      【解决方案3】:
       imagename.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                  @Override
                                  public void onSuccess(Uri uri) {
                                      insertDataFirebase_with_image(UID, String.valueOf(uri));
                                      insertData_with__Image(UID, String.valueOf(uri));
                                  }
                              });
      

      //这里的imagename是指向图片位置的StoragePreference //nad 插入数据是我用来将图像 URL 存储到我的实时数据库的函数

      【讨论】:

        猜你喜欢
        • 2018-11-10
        • 2021-10-12
        • 1970-01-01
        • 2019-06-24
        • 2018-01-24
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 2016-10-28
        相关资源
        最近更新 更多