従来のASPのファイルでHTTP POSTリクエストを作成しようとしています。目標は以下のような一般的なHTMLフォームと同じです:従来のASP、HTTP POSTリクエストによるファイルアップロード
<html>
<head>
</head>
<body> <form method="POST" action="/upload_page.asp?category=5&subcategory=10" enctype="multipart/form-data">
<fieldset>
<input type="file" name="file" />
<button type="submit">Upload</button>
</fieldset>
</form>
</body>
</html>
これは正しく動作します。ブラウザでWebフォームからPOSTリクエストを行うと、すべて正常です。
また、これは次のようにcURLで行うことができます。
curl --form [email protected]/test.mp4
"/upload_page.asp?category=5&subcategory=10"
問題がある、私は従来のASPでそれを試して何か間違ったことをしています。ここにASPコードがあります:
Dim adTypeBinary, adTypeText, adModeReadWrite
adTypeBinary = 1
adTypeText = 2
adModeReadWrite = 3
Function StringToBinary(input)
dim stream
set stream = Server.CreateObject("ADODB.Stream")
stream.Charset = "UTF-8"
stream.Type = adTypeText
stream.Mode = adModeReadWrite
stream.Open
stream.WriteText input
stream.Position = 0
stream.Type = adTypeBinary
StringToBinary = stream.Read
stream.Close
set stream = Nothing
End Function
Function ReadBinaryFile(fullFilePath)
dim stream
set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 1
stream.Open()
stream.LoadFromFile(fullFilePath)
ReadBinaryFile = stream.Read()
stream.Close
set stream = nothing
end function
Dim boundary
boundary = "---------------------------9849436581144108930470211272"
' Generate data to be sent with HTTP POST
Dim BINARYPOST
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = adTypeBinary
stream.Mode = adModeReadWrite
stream.Open
stream.Write StringToBinary("" & boundary & vbCrLf & _
"Content-Disposition: form-data; name=""file""; file=""" & Server.MapPath("test.mp4") & """" & _
"Content-Type: video/mp4" & vbCrLf & vbCrLf)
stream.Write ReadBinaryFile(Server.MapPath("test.mp4"))
stream.Write StringToBinary(vbCrLf & boundary & "--")
stream.Position = 0
BINARYPOST= stream.read
stream.Close
' Send HTTP POST
set xmlhttp = CreateObject("Msxml2.ServerXMLHTTP.6.0")
xmlhttp.open "POST", upload_url, false
xmlHttp.setRequestHeader "content-type", "multipart/form-data; boundary=" & boundary
xmlhttp.send BINARYPOST
古典的なASPアプローチの問題は、私が2ページ目のファイルデータを読み取ることができないということです。 私はおそらく、サーバー側のページがファイルフィールドの名前を見つけることができないと思うかもしれません(HTMLフィールドの例のように、アップロードするフィールドの変数名は "file"です)。
古典的なASPリクエストで何が間違っている可能性がありますので、HTMLやPHPのようにPOSTリクエストを送信しませんか?
ありがとうございます!
Craigをお試しいただきありがとうございます。それは非常に感謝しています。残念ながら、私は既に別のサーバに投稿して同じ問題を起こそうとしました。私が今考えている最高ののは、.NETのカスタムコンポーネントを使ってASPページから呼び出すことです。 – BorisP