2016-03-25 8 views
0

従来の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リクエストを送信しませんか?

ありがとうございます!

答えて

0

ASPから転記しているページと同じ仮想フォルダ内のURLへの投稿に問題があることを思い出しているようです。別のサーバー上のハンドラにポスティングして、これが起こっているかどうかを確認してください。

+0

Craigをお試しいただきありがとうございます。それは非常に感謝しています。残念ながら、私は既に別のサーバに投稿して同じ問題を起こそうとしました。私が今考えている最高ののは、.NETのカスタムコンポーネントを使ってASPページから呼び出すことです。 – BorisP

関連する問題