我需要能够从服务器端的经典ASP代码向另一个网站发送文件。另一个网站有一个带有文件上传控件的表单,我需要模拟发布到此表单。
我找到了一些看似完美的作业代码here,它上传文件时没有错误,但收到的文件无效,当我在另一台服务器上检查文件的开头之前二进制数据中包含的部分发布数据不应该存在,例如:
ntent-Type:image / jpeg
内容处理:表格数据; NAME = “文件”;文件名= “archivebox.jpg”...ÿØÿà
当我通过表单上传数据时,接收网站代码工作正常,所以看起来问题就是上面的代码。
如果此代码不起作用,是否有其他人可以指向另一个样本的方向以这种方式提交文件?
答案 0 :(得分:2)
在我的问题中使用链接中的代码示例,我修改了它以手动构建请求并且它有效。我还转换为一个函数,它接受一个二进制文件和一个参数并对请求进行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