2017-05-23 83 views
0

这可能是一个简单的问题,但我无法使其工作。 我没有问题用TakePhotoAsync()从相机设置图片。MediaPlugin - 从路径获取媒体文件

问题是,我上传图片到BlobStorage,我想从Blob Byte数组中获取Plugin.Media.Abstractions.MediaFile。 类似于:

MediaFile file = new MediaFile(...); 

有谁知道该怎么做?

在此先感谢

编辑:我的问题似乎基于一种答案是不太清楚。 我可以拍照并将其上传到BLOB存储。

这与我想要做的相反,看不出如何。 我想从Blob存储中下载我作为字节数组获取的图片,然后从中获取MediaFile。

回答

0

首先,你需要使用这个代码,以图片:

EventImageFile = await CrossMedia.Current.TakePhotoAsync(
         new StoreCameraMediaOptions 
         { 
          SaveToAlbum = true, 
          Directory = "your directory name", 
          Name = DateTime.Now + ".jpg", 
          DefaultCamera = CameraDevice.Rear, 
          //CompressionQuality = 10 
         }); 

然后你就可以将它使用这段代码为byte []:

private byte[] ConvertMediaFileToByteArray(MediaFile file) 
{ 
    using (var memoryStream = new MemoryStream()) 
    { 
     file.GetStream().CopyTo(memoryStream); 
     return memoryStream.ToArray(); 
    } 
} 

并发布您的byte []到blob storage

+0

谢谢你的回答。 正如我所说,我没有问题从TakePhotoAsync获取和上传文件。 我的问题是,我想从blob存储中下载图片字节,然后用字节数组实例化MediaFile。 –

+0

抱歉误会。你尝试过:ImageSource.FromStream(()=> new MemoryStream(imageAsBytes)); – Onur

+0

我也可以做到这一点,它就像一个魅力。 但是我仍然无法看到如何获得Plugin.Media.Abstractions.MediaFile。 –

0

要从blob下载图像,请使用HttpClient并将其作为Byte数组下载。 一旦你有你的阵列,你可以将它保存到你的应用程序有权限的任何文件夹。 当你保存它时,你应该有相同的路径。 您可以使用路径通过图像视图或介质选取器加载图像。

+1

我想这就是我最终会做的。 我正在寻找一种方法来避免这种情况,但我不确定这是可能的。 谢谢。 –