我试图从我上传到firebase存储的照片中获取图像网址,这样我就可以将图像的引用存储在另一个表格中,这样我就能够在整个应用程序的其他地方显示图像。
我目前有
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);
}
}
答案 0 :(得分:0)
我认为麻烦的是Guid.NewGuid()。 每次插入新图像并且storageref指向它时,它都会生成一个新代码(图像/ GUID代码)。 在您的OnSuccess中,您可以从" images /"获取图像信息。 + filePath,与上传路径不同。 为什么使用新的GUID?你无法确定它,每次都会创建一条不同的路径。
然后考虑您的下载网址也包含媒体令牌,它不仅仅是您期望的干净路径
答案 1 :(得分:0)
我在调试模式下得到了一个解决方案
我看到了downloadurl的属性并找到了Scheme和SchemeSpecificPart
Scheme =" https"
SchemeSpecificPart =" // firebasestorage.googleapis.com/v0/b/maplog-e4ba5.appspot.com/o/-L0AMbihF23YKxsL1uss?alt=media&token=5c7ccef1-c857-4982-a288-fded2f0ff1aa 34; 所以这是我的代码:
void IOnSuccessListener.OnSuccess(Java.Lang.Object result)
{
var snapShot = (UploadTask.TaskSnapshot)result;
string imgUrl = snapShot.DownloadUrl.Scheme
+ ":"
+ snapShot.DownloadUrl.SchemeSpecificPart;
}
它有效!我正在寻找解决方案:((但我终于找到了自己的XD