2012年1月13日金曜日

WCF+RESTでファイル受信する際にヘッダー情報を分離

ASP.NETでWCFをホストし,POSTメソッドでファイルを受信するのはうまくできたのですが,受信した Stream型(System.IO.Stream)にヘッダー情報が含まれてしまい,そのまま保存するとファイルが壊れてしまうという問題に当たってしまいました。


FiddlerでファイルをPOST送信したときのRequestBody

---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="test.JPG"
Content-Type: image/jpeg

<@INCLUDE *C:\Users\nemo\Pictures\test.JPG*@>
---------------------------acebdf13572468--

.NETのライブラリに便利なものはないかいろいろと調べたけれど見つからず,結局コードを書いて処理しなくてはいけないかと考えましたが,幸い以下のコードが公開されていました。

http://multipartparser.codeplex.com/

VBで使えるように変換・調整して使うと,簡単に解決しました。

変換サイト

VB.NET(修正前)

' Get the start & end indexes of the file contents
Dim startIndex As Integer = contentTypeMatch.Index + contentTypeMatch.Length + vbCr & vbLf & vbCr & vbLf.Length

Dim delimiterBytes As Byte() = encoding.GetBytes(vbCr & vbLf & delimiter)

VB.NET(修正後)

' Get the start & end indexes of the file contents
Dim startIndex As Integer = contentTypeMatch.Index + contentTypeMatch.Length + vbCr.Length + vbLf.Length + vbCr.Length + vbLf.Length

Dim delimiterBytes As Byte() = encoding.GetBytes(vbCr & vbLf & delimiter)

ファイル名の取得もプロパティでできるし,快適です。
開発者に感謝です。

0 件のコメント:

コメントを投稿