0

サーバー側のクラシック ASP コードから別の Web サイトにファイルを送信できるようにする必要があります。他の Web サイトには、ファイル アップロード コントロールを備えたフォームがあり、このフォームへの投稿をシミュレートする必要があります。

ここでの仕事に最適と思われるサンプルコードをいくつか見つけました。エラーなしでファイルをアップロードしますが、受信したファイルは有効ではなく、他のサーバーで検査すると、バイナリデータの一部が含まれる前のファイルの先頭そこにあってはならない投稿されたデータ、例えば:

ntent-Type: image/jpeg
Content-Disposition: フォームデータ。名前="ファイル"; ファイル名="アーカイブボックス.jpg"

ええええ...

フォームを介してデータをアップロードすると、受信側の Web サイト コードが正常に機能するため、上記のコードに問題があるように見えます。

このコードが機能しない場合、他の誰かがこの方法でファイルを送信するための別のサンプルの方向性を教えてくれますか?

4

1 に答える 1

4

質問のリンクにあるコード サンプルを使用して、リクエストを手動で作成するように変更したところ、機能しました。また、バイナリ ファイルと 1 つのパラメーターを受け取り、要求を POST する単一の関数に変換しました。

Function PostDocument(intDocumentID, binFile, strFilename, strContentType)
Dim objHttp, strBoundary, strRequestStart, strRequestEnd, binPost
Dim objStream

strBoundary = "---------------------------9849436581144108930470211272"

Set objHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

strRequestStart = "--" & strBoundary & vbCrlf &_
    "Content-Disposition: form-data; name=""id""" & vbCrlf &_
    vbCrlf &_
    intDocumentID & vbCrlf &_
    vbCrlf &_
    "--" & strBoundary & vbCrlf &_
    "Content-Disposition: form-data; name=""file""; filename=""" & strFilename & """" & vbCrlf &_
    "Content-Type: " & strContentType & vbCrlf &_
    vbCrlf

strRequestEnd = vbCrLf & "--" & strBoundary & "--"

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Type = adTypeBinary '1
objStream.Mode = adModeReadWrite '3
objStream.Open
objStream.Write StringToBinary(strRequestStart)
objStream.Write binFile
objStream.Write StringToBinary(strRequestEnd)
objStream.Position = 0

binPost = objStream.Read

Response.Write binPost

objStream.Close
Set objStream = Nothing

objHttp.Open "POST", "(url removed)", False, "(username removed)", "(password removed)"
objHttp.setRequestHeader "Content-Type", "multipart/form-data; boundary=""" & strBoundary & """"
objHttp.Send binPost

PostDocument = objHttp.ResponseText

Set objHttp = Nothing
End Function

Function StringToBinary(toConvert)
Dim objStream, data

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Charset = "ISO-8859-1"
objStream.Type = adTypeText '2
objStream.Mode = adModeReadWrite '3
objStream.Open
objStream.WriteText toConvert

objStream.Position = 0
objStream.Type = adTypeBinary '1
StringToBinary = objStream.Read

objStream.Close
Set objStream = Nothing
End Function
于 2012-06-17T07:05:12.910 に答える