【问题标题】:In Firebase after uploading Image how can I get Url? [duplicate]上传图片后在 Firebase 中如何获取 Url? [复制]
【发布时间】:2017-03-03 19:13:03
【问题描述】:

现在,我正在使用以下代码从 Firebase 存储中获取图像:

mStoreRef.child("photos/" + model.getBase64Image())
          .getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            // Got the download URL for 'photos/profile.png'

                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            // Handle any errors
                            Toast.makeTextthis, "image not dowloaded", Toast.LENGTH_SHORT).show();
                        }
                    });

有没有可能得到这个如图所示的网址?

【问题讨论】:

  • 同时在 Firebase 商店图像路径上将新图像上传到新的孩子并访问该孩子的图像 url stackoverflow.com/questions/37335102/…
  • 您发布的代码正是执行此操作的代码。这里有问题吗,那个代码不行吗?
  • 该代码工作正常,但是当添加新图像时,该图像未加载到我的图像视图中
  • 这不是你要问的问题 :) 我会看看github.com/firebase/FirebaseUI-Android/tree/master/storage
  • 我上传的时候没有保存,怎么获取下载地址?我有像“images/userkey/myimage.png”这样的路径..有什么建议吗?

标签: java android firebase firebase-storage


【解决方案1】:

点击此链接-https://firebase.google.com/docs/storage/android/download-files#download_data_via_url

    storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            // Got the download URL for 'users/me/profile.png'
            Uri downloadUri = taskSnapshot.getMetadata().getDownloadUrl();
            generatedFilePath = downloadUri.toString(); /// The string(file link) that you need
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
        }
    });

【讨论】:

  • getDownloadUrl() 现已弃用
  • @MuhammadAliJr 那么,现在的代码是什么?你找到了吗?
【解决方案2】:

根据最新的 firebase 更改,以下是更新后的代码:

File file = new File(String.valueOf(imageUri));         
FirebaseStorage storage = FirebaseStorage.getInstance();        
StorageReference storageRef = storage.getReference().child("images");

storageRef.child(file.getName()).putFile(imageUri)
    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            pd.dismiss();
            Toast.makeText(MyProfile.this, "Image Uploaded Successfully", Toast.LENGTH_SHORT).show();
            Task<Uri> downloadUri = taskSnapshot.getStorage().getDownloadUrl();

           if(downloadUri.isSuccessful()){
            String generatedFilePath = downloadUri.getResult().toString();
            System.out.println("## Stored path is "+generatedFilePath);
        }}
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            pd.dismiss();                     
        }
    });

}

【讨论】:

    【解决方案3】:

    这就是我在 kotlin android 中获取下载链接的方式。

     ref.putFile(filePath!!)
                .addOnSuccessListener {
    
                    val result = it.metadata!!.reference!!.downloadUrl;
                    result.addOnSuccessListener {
    
                       var imageLink = it.toString()
    
    
                    }
                }
    

    【讨论】:

      【解决方案4】:

      这在最新的 firebase 版本上运行良好

      UploadTask uploadTask = ref.putBytes(data);
      uploadTask.addOnSuccessListener(new OnSuccessListener<TaskSnapshot>() {
      
              @Override
              public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                  taskSnapshot.getStorage().getDownloadUrl().addOnCompleteListener(
                          new OnCompleteListener<Uri>() {
      
                                 @Override
                                  public void onComplete(@NonNull Task<Uri> task) {
                                  String fileLink = task.getResult().toString();
                                  //next work with URL
      
                                  }
                              });
      

      【讨论】:

        【解决方案5】:

        过去,firebase 使用getMetadata().getDownloadUrl(),现在他们使用getDownloadUrl()

        应该这样使用:

        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                String image = taskSnapshot.getDownloadUrl().toString());
            }
        });
        

        【讨论】:

        • 上一个答案已失效,这是帖子的正确答案,您还需要说明吗?
        • 本网站用于学习目的。添加您的答案的一般解释,例如:为什么它比前一个更好或它如何回答问题。通常在没有解释的情况下放一个代码会导致一些人只是投反对票,即使答案是正确的。
        • 这里就不多解释了,不好意思,刚才firebase用getMetadata().getDownloadUrl(),今天直接用getDownloadUrl()。
        • 这应该在答案描述中。没关系,我自己编辑的。
        【解决方案6】:

        上述方法taskSnapshot.getMetadata().getDownloadUrl(); 已被弃用,作为substitute 提供了此替代方法:

        final StorageReference ref = storageRef.child("images/mountains.jpg");
        uploadTask = ref.putFile(file);
        
        Task<Uri> urlTask = uploadTask.continueWithTask(new 
          Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
             @Override
              public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
            if (!task.isSuccessful()) {
                throw task.getException();
            }
        
            // Continue with the task to get the download URL
            return ref.getDownloadUrl();
        }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()) {
                Uri downloadUri = task.getResult();
            } else {
                // Handle failures
                // ...
            }
          }
        });
        

        【讨论】:

        【解决方案7】:
         //kotlin
        
        var uri:Uri
            uploadTask.addOnSuccessListener {t ->
                t.metadata!!.reference!!.downloadUrl.addOnCompleteListener{task ->
                    uri = task.result!!
        
                }
            }
        

        【讨论】:

          【解决方案8】:

          是的,这是可能的! 这里不是一些令人毛骨悚然的复杂代码行,而是我从 kotlin 的 firebase 存储中获取下载 URL 的捷径

          注意:基于最新的 firebase 版本,没有 getdownloadurl()getresult() 方法(这一次他们是折旧的猎物)

          所以我在这里使用的技巧是通过从 taskSnapshot 对象 调用 UploadSessionUri 来返回下载 URL 以及上传类型,tokenid(一个是仅在较短的时间内可用)和其他一些东西。

          由于我们只需要下载 url,我们可以使用 substring 获取 downloadurl 并将其与 alt=media 连接以查看图像。

          var du:String?=null
          var du1:String?=null
          var du3:String="&alt=media"
          val storage= FirebaseStorage.getInstance()
                  var storagRef=storage.getReferenceFromUrl("gs://hola.appspot.com/")
                  val df= SimpleDateFormat("ddMMyyHHmmss")
                  val dataobj= Date()
                  val imagepath=SplitString(myemail!!)+"_"+df.format(dataobj)+".jpg"
                  val imageRef=storagRef.child("imagesPost/"+imagepath)
                  val baos= ByteArrayOutputStream()
                  bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos)
                  val data=baos.toByteArray()
                  val uploadTask=imageRef.putBytes(data)
                  uploadTask.addOnFailureListener{
                      Toast.makeText(applicationContext,"Failed To Upload", Toast.LENGTH_LONG).show()
                  }.addOnSuccessListener { taskSnapshot ->
                      imageRef.downloadUrl.addOnCompleteListener (){
                          du=taskSnapshot.uploadSessionUri.toString()
                          du1=du!!.substring(0,du!!.indexOf("&uploadType"))
                          downloadurl=du1+du3
                          Toast.makeText(applicationContext,"url"+downloadurl, Toast.LENGTH_LONG).show()
                      }
                  }
          

          希望对你有帮助!

          【讨论】:

            【解决方案9】:

            这应该是在kotlin中应该如何完成的 你需要添加一个 onCompleteListener

            putFile(file).addOnSuccessListener {
            
                        it.storage.downloadUrl.addOnCompleteListener {
                        //then you can call it.result.toString()
                        }
            }
            

            【讨论】:

              【解决方案10】:

              这对我有依赖性 - implementation 'com.google.firebase:firebase-storage:19.1.0'

              ref.putFile(iconUriLocalFilePath)
                      .addOnSuccessListener(  
                          new OnSuccessListener<UploadTask.TaskSnapshot>() {
                          @Override
                          public void onSuccess(
                                  UploadTask.TaskSnapshot taskSnapshot)
                          {
                              Task<Uri> uri = ref.getDownloadUrl();
                              String iconPathFirebase = uri.getResult().toString();
                          }
                  });
              

              【讨论】:

              • 你的意思是:Task uri = taskSnapshot.getStorage().getDownloadUrl();
              【解决方案11】:

              我试过了,它给了我在 imageview 上查看它的链接:

              storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                  @Override
                  public void onSuccess(Uri uri) {
                      // Got the download URL for 'users/me/profile.png'
                      uri.toString();
                  }
              }).addOnFailureListener(new OnFailureListener() {
                  @Override
                  public void onFailure(@NonNull Exception exception) {
                      // Handle any errors
                  }
              });
              

              【讨论】:

                【解决方案12】:

                如果您已经拥有基于 URL 的下载基础架构,或者只是希望共享一个 URL,则可以通过在存储引用上调用 getDownloadUrl() 方法来获取文件的下载 URL。

                // Create a storage reference from our app
                val storageRef = storage.reference
                
                 storageRef.child("users/me/profile.png").downloadUrl.addOnSuccessListener {
                            // Got the download URL for 'users/me/profile.png'
                        }.addOnFailureListener {
                            // Handle any errors
                        }
                

                firebase documentation

                【讨论】:

                  猜你喜欢
                  • 2021-01-24
                  • 2020-04-18
                  • 2013-12-18
                  • 2019-04-30
                  • 2017-12-12
                  • 1970-01-01
                  • 2023-03-06
                  • 1970-01-01
                  • 2021-07-13
                  相关资源
                  最近更新 更多