我正在使用 WCF RESTful 服务将图像上传到我的数据库代码:
[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 记录转换为 Image Stream 时:出现错误: “未找到适合完成此操作的成像组件。”
似乎 MemoryStream 已损坏。
//photoBytes from database
MemoryStream photoStream = new MemoryStream(photoBytes)
//Error happened here
var photoDecoder = BitmapDecoder.Create(
photoStream,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.None);
另外,该错误仅在通过 WCF Restful 服务上传图像时发生。如果图像是通过网络表单上传的,它可以完美地工作。
问题:
我在哪里做错或错过了?
我如何编写一个测试客户端来测试这个上传 api?
非常感谢