如何将Stream(图像数据)转换回文件

时间:2010-05-06 12:17:38

标签: .net wcf filesystems

我正在尝试上传图片的WCF Restful服务。我有一个非常基本的metod接受一个流作为它唯一的参数,并在合同中定义为:

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

我实际上正在使用Flash中的这项服务(这是相当不公平的),它从文件系统中选择一个文件并通过服务URL上传。

这一切似乎都有效,向UploadImage方法添加断点按预期中断。

如果我想将此文件保存回磁盘,是否只是将此Stream对象读入FileStream对象,在某处创建文件?有点like the this?当我实际执行此操作时,无法将文件作为图像打开。我敢肯定,我在这里缺少一个关键知识。我的流实际上只包含图像字节还是包含更多?

接受答复后编辑:

问题在于,flash将图像上传编码为multipart / form-data,这会将附加数据添加到邮件正文中。我使用MultipartParser found here来获取实际图像并写入磁盘。

2 个答案:

答案 0 :(得分:1)

只要流不会从原始文件中删除,您只需打开一个新的文件流并将图像流复制到其中(确保您处于流的开头并确保使用一个可靠的字符串复制算法,如您链接的算法)。它(通常)就像那样简单。如果应用程序通过流向您发送文件,则可能会变得复杂。但是只有一种方法可以找出是否是这种情况......

答案 1 :(得分:0)

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

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