File upload 经典ASP,带HTTP POST请求的文件上载
我正在尝试使用经典ASP中的文件发出HTTP POST请求。目标是实现与常见HTML表单(如bellow)相同的功能:File upload 经典ASP,带HTTP POST请求的文件上载,file-upload,asp-classic,http-post,File Upload,Asp Classic,Http Post,我正在尝试使用经典ASP中的文件发出HTTP POST请求。目标是实现与常见HTML表单(如bellow)相同的功能: <html> <head> </head> <body> <form method="POST" action="/upload_page.asp?category=5&subcategory=10" enctype="multipart/form-data"> <fieldset> <
<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>
问题是,当我在经典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方法的问题是我无法读取第二页上的文件数据。
我怀疑服务器端页面可能找不到文件字段的名称(上传字段的变量名是“file”,就像在HTML示例中一样),但对此不确定
你知道经典的ASP请求会有什么问题吗,所以它不会像HTML和PHP版本那样以相同的方式发送POST请求
谢谢 我似乎记得,从ASP发布到与发布页面位于同一虚拟文件夹中的URL时出现问题。尝试向另一台服务器上的处理程序发帖,以验证是否会发生这种情况。感谢您尝试Craig。非常感谢。不幸的是,我已经尝试在另一台服务器上发布,但遇到了同样的问题。我现在能想到的最好办法是在.Net中使用自定义组件,并从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