我需要從Plugin.Media.Abstractions.MediaFile
類型轉換爲Windows.Storage.StorageFile
。UWP - 將MediaFile轉換爲StorageFile
原因是我得到一個MediaFile
,我想通過該路徑上傳到服務器,但在UWP中,您必須使用StorageFiles而不是文件路徑,因爲否則UWP不知道用戶擁有這個文件的權限,只是拒絕訪問。所以我想將MediaFile轉換爲StorageFile,以便能夠在用戶的臨時文件夾中創建文件的副本。該文件夾中的文件可以通過文件路徑訪問。
那就是我已經試過:
Stream stream = _mediaFile.GetStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string streamText = reader.ReadToEnd();
_websocketManager.sendFileMessage(_selectedChat.chatId, _nachrichttext, streamText);
sendFileMessage()
從接口的方法,因此參數必須是一個字符串,我不能改變的。本來這個字符串應該是路徑,所以對我來說這是一個便宜的解決方法,但是這對我想要達到的目標是合法的。
在WebsocketManager,這是我的方法sendFileMessage()
:
byte[] byteArray = Encoding.UTF8.GetBytes(streamText);
MemoryStream stream = new MemoryStream(byteArray);
StorageFolder temporaryFolder = ApplicationData.Current.TemporaryFolder;
var temporaryFile = await temporaryFolder.CreateFileAsync("temporaryFile", CreationCollisionOption.ReplaceExisting);
using (var fileStream = File.Create(temporaryFolder.Path + "\\TemporaryFile")) // TODO: How to data type? (.png, .jpg, ...)
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(fileStream);
}
string filePath = temporaryFile.Path;
string remoteFilePath = null;
if (!string.IsNullOrEmpty(filePath))
{
await StorageFile.GetFileFromPathAsync(filePath);
remoteFilePath = await uploadFile(filePath);
}
dataWriter.WriteString(WebsocketRequestFactory.Create(SocketEventsEnm.MESSAGE_OUT, chatId, message, remoteFilePath, TypeEnm.IMAGE));
await SendData(dataWriter);
await temporaryFile.DeleteAsync();
而且,正如我在代碼註釋,我需要找出哪些數據類型MediaFile
爲(巴紐,JPG格式,等等) 。
謝謝。我改了一下你的代碼,以便它適用於我的具體情況。我只需要SaveImage(),然後讓它返回文件的路徑。現在我可以使用這個路徑爲我的方法「sendFileMessage」! –