ASP如何(multipartfile)post文件、头、参数

ASP如何(multipartfile)post文件、头、参数
以下是一个正常、完整、可用,完全没问题和HTML代码,需要手动选择图片,然后上传,如何写成ASP后台上传?打开页面就传过去了,并返回值

img

我在这篇文章这里找到了上传的代码,但找不到哪传传输和改掉 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