ASPでFormを使ってアップロード

最終更新日時:2014-03-28 00:00:00
ASP

ASP でいわゆる、 これには、そもそも http リクエストを ASP 内で生成する必要があるのですが、それについては、他のサイトのコンテンツを ASP で取得するを参照。

ここでは、他のサイトのコンテンツを ASP で取得する のうちの MSXML2 を使用するパターンでアップロードする方法を紹介します。

アップロードのみを実装


とにかくファイルをアップロードしたいというだけの目的であれば、それほど難しくありません。
以下のように、Content-Disposition と Content-Type を適切に指定しつつ、、

 Content-Disposition: form-data; name="test.csv"; filename="test.csv"
 Content-Type: text/csv


ファイル本体を send すればOKです。
ファイル本体が画像等のバイナリデータだったりするともう少しケアが必要ですが、基本原理は同様です。
このパターンは、次に紹介するパラメータとアップロードの両方を行う場合のサブセットとなりますので、具体的なコードは次を参考にしてください。


パラメータおよびアップロード


いわゆるマルチパートな POST 通信を行う必要があります。
マルチパートな POST 通信の仕様を前提に実装しますので、その辺りについては、Formを使ったアップロードを参照。
FORMDATA_BOUNDARY には、それぞれのパートを区切るための文字列が入りますので、他に現れない文字列を指定する必要があります。

 Dim oXmlHttp, html, body, FORMDATA_BOUNDARY
 Set oXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
 FORMDATA_BOUNDARY = "testdM57cFL7Fc"
 oXmlHttp.open "POST", "http://xxx.xxx.xxx/xxx, False
 Call oXmlHttp.setRequestHeader("Content-Type", "multipart/form-data; boundary=" & FORMDATA_BOUNDARY)
 body = "--" & FORMDATA_BOUNDARY & vbLf & _
        "Content-Disposition: form-data; name=""login_id""" & vbLf & _
        vbLf & _
        "login_id_str" & vbLf & _
        "--" & FORMDATA_BOUNDARY & vbLf & _
        "Content-Disposition: form-data; name=""password""" & vbLf & _
        vbLf & _
        "password_str" & vbLf & _
        "--" & FORMDATA_BOUNDARY & vbLf & _
        "Content-Disposition: form-data; name=""csvfilie""; filename=""test.csv"" & vbLf & _
        "Content-Type: text/csv" & vbLf & _
        vbLf & _
        CSVFILE
        "--" & FORMDATA_BOUNDARY & "--" & vbLf
 Call oXmlHttp.send(body)
 html = oXmlHttp.responseText


お問い合わせは 掲示板 にて。