私は自分のデータベースコードに画像をアップロードするためにWCFの安らかなサービスを使用しています:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "AddDealImage/{id}")]
long AddDealImage(string id, Stream image);
public long AddDealImage(string id, Stream image)
{
//add convert Stram to byte[]
byte[] buffer = UploadFile.StreamToByte(image);
//create image record for database
Img img = ImgService.NewImage(DateTime.Now.ToFileTime().ToString(), "", buffer, "image/png");
ImgService.AddImage(img);
//return image id
return img.ImageId;
}
public static byte[] StreamToByte(Stream stream)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
問題: iPhone 経由で写真をアップロードすると、POST が成功しました。新しいイメージ ID が返され、データベースに作成された新しいレコードが表示されます。しかし、DB レコードからイメージ ストリームにバイナリを変換しようとすると、次のエラーが表示 されました。「この操作を完了するのに適したイメージング コンポーネントが見つかりませんでした。」
MemoryStream が壊れているようです。
//photoBytes from database
MemoryStream photoStream = new MemoryStream(photoBytes)
//Error happened here
var photoDecoder = BitmapDecoder.Create(
photoStream,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.None);
さらに、エラーは、画像が WCF Restful サービスを介してアップロードされた場合にのみ発生します。画像が Web フォーム経由でアップロードされている場合は、完全に機能します。
質問:
どこで間違った、または逃したのですか?
このアップロード API をテストするテスト クライアントを作成するにはどうすればよいですか?
どうもありがとう