从firebase存储获取图像下载网址Xamarin

问题描述:

我试图从照片中获取图片url我上传到firebase存储,所以我可以在另一个表中存储对图像的引用,这将允许我能够在其他地方显示图像整个应用程序。从firebase存储获取图像下载网址Xamarin

我现在有

private void UploadPhoto() 
    { 

     if (filePAth != null) 
     { 
      progressDialog = new ProgressDialog(this); 
      progressDialog.SetTitle("Uploading..."); 
      progressDialog.Window.SetType(Android.Views.WindowManagerTypes.SystemAlert); 
      progressDialog.Show(); 

      var images = storageRef.Child("images/" + Guid.NewGuid().ToString()); 
      images.PutFile(filePAth) 
       .AddOnProgressListener(this) 
       .AddOnSuccessListener(this) 
       .AddOnFailureListener(this); 
     }    
    } 


public async void OnSuccess(Java.Lang.Object result) 
    { 

     try 
     { 
      var newImageDetails = storageRef.Child("images" + "/" + filePAth); 
      Photo photos = new Photo(); 
      photos.categoryName = spinner.SelectedItem.ToString(); 
      photos.photoId = newImageDetails.Name; 
      photos.ImageUrl = storageRef.DownloadUrl.ToString(); 
      photos.tagName = addTag.Text; 

      if (user != null) 
      { 
       var uid = user.Uid; 
       //set the users id to the category 
       photos.uid = uid; 
      } 

      var firebase = new FirebaseClient(FirebaseURL); 
      var item = await firebase.Child("photos").PostAsync(photos); 
     } 
} 

的storageref.DownloadUrl不给我正确的URL 这就是我要寻找 enter image description here

我觉得麻烦的是Guid.NewGuid() 。 每次插入新图像并且您的storageref指向它时,它都会生成一个新代码(图像/ GUID代码)。 在您的OnSuccess中,您从“images /”+ filePath获取图像信息,这与上传路径不同。 为什么你使用新的GUID?你不能确定它,它会每次创建一个不同的路径。

考虑那么你下载的文件的URL包含了媒体令牌太多,这不是简单的清洁路径如您所愿

我在调试模式下的解决方案

我看到将downloadURL的属性,发现计划和SchemeSpecificPart

计划= “https” 开头

SchemeSpecificPart =“//firebasestorage.googleapis.com/v0/b/maplog-e4ba5.appspot.com/o/-L0A ?MbihF23YKxsL1uss ALT =媒体&令牌= 5c7ccef1-c857-4982-A288-fded2f0ff1aa” 所以这里是我的代码:

void IOnSuccessListener.OnSuccess(Java.Lang.Object result) 
{ 
    var snapShot = (UploadTask.TaskSnapshot)result; 
    string imgUrl = snapShot.DownloadUrl.Scheme 
    + ":" 
    + snapShot.DownloadUrl.SchemeSpecificPart; 
} 

和它的作品!我正在寻找解决方案:((但我终于自己找到了XD