2010-05-06 47 views
0

我有一个WCF宁静的服务,我试图上传一个图像。我有一个接受一个流一个非常基本的梅托德,因为它是唯一的参数,并在合同中定义为:我如何将我的流(图像数据)转换回文件

[OperationContract] 
[WebInvoke(UriTemplate = "ReviewImage", BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")] 
ReviewImage UploadImage(Stream data); 

我实际上消耗从闪存这项服务(这是相当inconsequntial),它从选择了一个文件文件系统并通过服务url进行上传。

它的所有工作似乎工作,向UploadImage方法添加一个断点按预期中断。

如果我想将此文件保存回磁盘,是否只是将此Stream对象读入到创建该文件的FileStream对象的情况?有点like the this?当我真的这样做时,文件不能作为图像打开。我确信我错过了这里的一个关键知识。我的流实际上只包含图像字节还是包含更多?

EDIT后应答ACCEPTED:

问题是闪光图像编码作为上传的multipart/form-data的将其加入aditional的数据到邮件正文。我使用MultipartParser found here来获取实际图像并写入磁盘。

回答

1

只要流未从原始文件改变,您只需打开一个新的文件流并将图像流复制到该文件流中(确保您位于流的开始处并确保您使用可靠的字符串复制算法,如链接的那个)。它(通常)就像那样简单。如果应用向流发送文件混乱,它可能会变得复杂。但只有一种方法来确定是否是这种情况...

0

我会使用System.Draming命名空间中的Bitmap类(您还需要添加对System.Drawing的引用),以确保正确无误编码。

 Bitmap bmp = new Bitmap(data); 
     bmp.Save("Filename", ImageFormat.Jpeg);