2010-05-06 43 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);