ASP如何(multipartfile)post文件、头、参数
以下是一个正常、完整、可用,完全没问题和HTML代码,需要手动选择图片,然后上传,如何写成ASP后台上传?打开页面就传过去了,并返回值
我在这篇文章这里找到了上传的代码,但找不到哪传传输和改掉 name = "file"
https://bbs.csdn.net/topics/392385254
Dim filePath, POST_URL, multidata, xhr
filePath = "文件地址"
POST_URL ="网址"
Set multidata = New Multipart
multidata.AddFileEntity "data", filePath, "image/jpeg"
Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1")
xhr.Open "POST", POST_URL, False
xhr.SetRequestHeader "Content-Length", multidata.Size()'头
xhr.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & multidata.boundary
xhr.Send multidata.GetData()
Response.Write xhr.ResponseText
参数和图片中的 name = "picfile" 这两个,请问应该怎么改?
是不是ajax的post提交?下面的代码供参考,可以用asp把所有的name全部提取出来。
<%
function myleftb(mydata,datasize)
dim ad
set ad=server.createobject("adodb.stream")
ad.type=1
ad.mode=3
ad.open
ad.write mydata
ad.position=0
myleftb=ad.read(datasize)
ad.close
end function
function myrightb(mydata,datasize)
dim ad
set ad=server.createobject("adodb.stream")
ad.type=1
ad.mode=3
ad.open
ad.write mydata
ad.position=lenb(mydata)-datasize
myrightb=ad.read(datasize)
ad.close
end function
'查询字符第n词出现的位置
function scount(mydata,str,n)
dim datastart,m
datastart=1
m=0
do while instr(datastart,mydata,str)>0
m=m+1
if m=n then
scount=instr(datastart,mydata,str)
exit do
exit function
end if
datastart=instr(datastart,mydata,str)+len(str)
loop
if m<n then
scount=0
end if
end function
'截取字节
function cutout(mydata,datastart,datasize)
dim ldata,rdata
ldata=myleftb(mydata,datastart-1)
rdata=myrightb(mydata,lenb(mydata)-lenb(ldata))
cutout=myleftb(rdata,datasize)
end function
'查询字节第n次出现的位置
function bcount(mydata,str,n)
dim datastart,m
datastart=1
m=0
do while instrb(datastart,mydata,str)>0
m=m+1
if m=n then
bcount=instrb(datastart,mydata,str)
exit do
exit function
end if
datastart=instrb(datastart,mydata,str)+len(str)
loop
if m<n then
bcount=0
end if
end function
'字节转字符
function bts(data)
dim ad
set ad=server.createobject("adodb.stream")
ad.type=2
ad.mode=3
ad.open
ad.writetext data
ad.position=0
ad.charset="gb2312"
ad.position=2
bts=ad.readtext
ad.close
set ad=nothing
end function
'查询字节出现的次数
function checkcountb(mydata,str)
if lenb(str)=0 then
checkcountb=0
exit function
end if
dim m,datastart
m=0
datastart=1
do while instrb(datastart,mydata,str)>0
if instrb(datastart,mydata,str)=0 then
exit do
end if
m=m+1
datastart=instrb(datastart,mydata,str)+len(str)
loop
checkcountb=m
end function
formdata=binaryread(request.totalbytes)
set myform=server.createobject("scripting.dictionary")
if lenb(formdata)>0 then
hcf=chrB(13)&chrB(10)
fgf=myleftb(formdata,instrb(formdata,hcf)-1)
for n=1 to checkcountb(formdata,fgf)-1
datastart=bcount(formdata,fgf,n)+lenb(fgf)
dataend=bcount(formdata,fgf,n+1)-1
datasize=dataend-datastart+1
tempdata=cutout(formdata,datastart,datasize)
datastart=bcount(tempdata,hcf,1)+1
dataend=bcount(tempdata,hcf,2)-1
datasize=dataend-datastart+1
headdata=cutout(tempdata,datastart,datasize)
headdatastr=bts(headdata)
myarray=split(headdatastr,"""")
myform.add n,myarray(1)
next
for n=1 to myform.count
response.write "name是:"&myform.item(n)&"<br>"
next
end if
set myform=nothing
%>
Function GetFileData(path)
With CreateObject("ADODB.Stream")
.Type = 1
.Mode = 3
.Open
.LoadFromFile path
.Position = 0
GetFileData = .Read(-1)
.Close
End With
End Function
Function StringFromBytes(bytes, cSet)
With CreateObject("ADODB.Stream")
.Type = 1
.Open
.Write bytes
.Position = 0
.Type = 2
.Charset = cSet
StringFromBytes = .ReadText()
.Close
End With
End Function
Function GetBytes(str, cSet, bomLength)
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Charset = cSet
.Open
.Position = 0
.WriteText str
.Position = 0
.Type = 1
.Position = bomLength
GetBytes = .Read(-1)
.Close
End With
End Function
Class Multipart
Dim charset, bomLength, stream, boundary
Private Sub Class_Initialize()
Me.charset = "UTF-8"
Me.bomLength = 3
Set Me.stream = CreateObject("ADODB.Stream")
Me.stream.Mode = 3
Me.stream.Type = 1
Me.stream.Open
Me.boundary = "----WebKitFormBoundaryomATwYZzgiwmJSgy" ' 随便写一个,够复杂就行
End Sub
Sub WriteText(value)
Me.stream.Write GetBytes(value, Me.charset, Me.bomLength)
End Sub
Public Function Size()
Size = Me.stream.Size + Len(Me.boundary) + 4
End Function
Public Function GetData()
Me.stream.Position = 0
With CreateObject("ADODB.Stream")
.Type = 1
.Mode = 3
.Open
.Position = 0
.Write Me.stream.Read(-1)
.Write GetBytes("--" & Me.boundary & "--", Me.charset, Me.bomLength)
.Position = 0
GetData = .Read(-1)
.Close
End With
Me.stream.Position = Me.stream.Size
End Function
Public Sub AddTextEntity(name, value)
Me.WriteText "--" & Me.boundary & vbCrLf & "Content-Disposition: form-data; name=""" & name & """" & vbCrLf & vbCrLf & value & vbCrLf
End Sub
Public Sub AddFileEntity(name, filePath, mime)
Me.WriteText "--" & Me.boundary & vbCrLf
Me.WriteText "Content-Disposition: form-data; name=""" & name & """; filename=""" & filePath & """" & vbCrLf
Me.WriteText "Content-Type: " & mime & vbCrLf & vbCrLf
Me.stream.Write GetFileData(filePath)
Me.WriteText vbCrLf
End Sub
Private Sub Class_Terminate()
Me.stream.Close
Set Me.Stream = Nothing
End Sub
End Class
Dim filePath, POST_URL, multidata, xhr
POST_URL ="http://192.1.5.30:8080/kdxf"
Set multidata = New Multipart
multidata.AddFileEntity "picFile", "E:\40x40.jpg", "image/jpeg"
multidata.AddTextEntity "ksp_name", "1"
multidata.AddTextEntity "ksp_courtName", "1"
multidata.AddTextEntity "ksp_courtCode", "1"
multidata.AddTextEntity "ksp_serviceid", "63"
Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1")
xhr.Open "POST", POST_URL, False
xhr.SetRequestHeader "X-KSP-Token", "123456"
xhr.SetRequestHeader "Content-Length", multidata.Size()
xhr.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & multidata.boundary
xhr.Send multidata.GetData()
Response.Write xhr.ResponseText