タイプPlugin.Media.Abstractions.MediaFile
からWindows.Storage.StorageFile
に変換する必要があります。UWP - MediaFileをStorageFileに変換する
理由は私がパス経由でサーバーにアップロードしたいのですが、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、など) 。
ありがとうございます。私はあなたのコードを少し変更して、それが私の特定の状況のために働くようにしました。私はSaveImage()が必要なだけで、ファイルのパスを返すことができます。今私のメソッド "sendFileMessage"にこのパスを使用することができます! –