我需要从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”! –