SilverlightクライアントからサーバーにWCFサービスを使用して写真をアップロードしようとしています。SilverlightからWCFへの画像ファイル
クライアントによって呼び出されるメソッドは、void UpdatePicture(Stream image)です。クライアント側 この方法は、UpdatePicture(バイト[]配列)として現れるので、私は、コンバータを作成した(入力ストリーム)OpenFileDialog.File.OpenRead(からのFileStreamである)
private byte[] StreamToByteArray(Stream stream)
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
return array;
}
コンバータはいるようですうまくできた。
WCF側では、ストリームをファイルに保存する必要があります。私はこれを使用して、FileStreamをにストリームをコピーする
public void UpdatePicture(Stream image)
{
if (SelectedUser == null)
return;
if (File.Exists(image_path + SelectedUser.sAMAccountName + ".jpg"))
{
File.Delete(image_path + SelectedUser.sAMAccountName + ".jpg");
}
using (FileStream file = File.Create(image_path + SelectedUser.sAMAccountName + ".jpg"))
{
DataManagement.CopyStream(image, file);
}
}
:私はこれを使用
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
予想通りにファイルが作成され、サイズはokですが、画像はで表示されませんPhotoViewerの他のプログラム。
なぜ誰かが知っていますか?すべてのヘルプは非常に高く評価されるだろう:)
EDIT:本当に奇妙な
何か:
私は何もしないで、パラメータを返すWCFメソッドGetWCFBytes(バイト[]配列)を作成しました。 StreamToByteArrayを使用してストリームをこのメソッドにバイト配列として渡し、その結果をMemoryStreamを使用してBitmapImage経由でImageに設定すると、空のイメージが表示されます。
OpenFileDialogのストリームをバイト配列に変換し、この配列から新しいMemoryStreamを作成し、BitmapImageを設定します。画像はokです。
WCFはストリームとバイト配列に対していくつかの魔法を使用しますか?
回答ありがとうございますが、残念ながら問題は解決しません。 while + readを使用するかどうかに関係なく、ファイルのサイズは同じです。 バイト配列をストリームに変換して戻すと、BItmapImageでそれを使用することができ、Imageコントロールに正しく表示されるので、このメソッドは問題ありません。 私は、サーバー側で何かが間違っていると思います。 –