【发布时间】:2017-02-06 09:32:06
【问题描述】:
我需要将 typePlugin.Media.Abstractions.MediaFile 转换为 Windows.Storage.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 是哪种数据类型(.png、.jpg 等)。
【问题讨论】:
标签: image win-universal-app uwp converter windows-10-universal