2017-05-23 109 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

我想這就是我最終會做的。 我正在尋找一種方法來避免這種情況,但我不確定這是可能的。 謝謝。 –