2

httpListenerRequest の入力ストリームを解析しようとしていますが、multipart/form-data で深刻な問題が発生しています。

生の投稿の例を次に示します。

POST http://removed/ HTTP/1.1
Content-Type: multipart/form-data; boundary=-------------------------8cf5a569f9a4d4a
Host: removed
Content-Length: 15600
Expect: 100-continue
Proxy-Connection: Keep-Alive



---------------------------8cf5a569f9a4d4a
Content-Disposition: form-data; name="realname"

james
---------------------------8cf5a569f9a4d4a
Content-Disposition: form-data; name="username"

jrb1978
---------------------------8cf5a569f9a4d4a
Content-Disposition: form-data; name="password"

password
---------------------------8cf5a569f9a4d4a
Content-Disposition: form-data; name="public"

0
---------------------------8cf5a569f9a4d4a
Content-Disposition: form-data; name="group"

0
---------------------------8cf5a569f9a4d4a
Content-Disposition: form-data; name="avatar"; filename="Untitled.png"
Content-Type: image/png

?PNG
//jibberish filedata here
---------------------------8cf5a569f9a4d4a

一体どうやってその画像データを取得するのですか?最初の 5 つのフォーム変数を抽出するためにストリーム リーダーを使用して入力ストリームを文字列に読み取ることができますが、画像データを文字列に変換すると破損するため、画像データを抽出する方法の手がかりがありません。

4

1 に答える 1

1

http://msdn.microsoft.com/en-us/library/6196h3wt.aspxをチェックして、文字列が適切にデコードされていることを確認してください。

次に、この関数を使用して、画像を含む文字列の一部をバイト配列に変換します。

 Public Shared Function StrToByteArray(str As String) As Byte()
    Dim encoding As New System.Text.UTF8Encoding()
    Return encoding.GetBytes(str)
 End Function 'StrToByteArray

次に、この関数を使用してバイト配列を画像に変換します。

 Private Function BytesToImage(ByVal ImageBytes() As Byte) As Image
    Dim imgNew As Image
    Dim memImage As New System.IO.MemoryStream(ImageBytes)
    imgNew = Image.FromStream(memImage)
    Return imgNew
 End Function
于 2012-12-16T21:36:42.963 に答える