我组件中的代码如下:
Function upload(op_file)Dim file_data, file_size, form_data, var_crlf, divider, data_start, data_end, data_len
Dim DSX() As Byte '为字节数组,用来存储读写内容
Dim FreeNO As Integer
FreeNO = FreeFile()file_size = MyRequest.TotalBytes
form_data = MyRequest.BinaryRead(file_size)
var_crlf = ChrB(13) & ChrB(10)
divider = LeftB(form_data, CInt(InStrB(form_data, var_crlf)) - 1)
data_start = InStrB(form_data, var_crlf) + 62
data_end = InStrB(data_start, form_data, var_crlf) - 2
data_len = data_end - data_start + 1
data_start = data_end + 18
data_end = InStrB(data_start, form_data, var_crlf & var_crlf) - 1
data_len = data_end - data_startOpen op_file For Binary Access Write As #FreeNO
ReDim DSX(data_len) As Byte '设置存储字节数组的大小
Put #FreeNO, , DSX()
Close #FreeNO
End Function
Function BinaryToString(thedata) '将二进制数据转换成字符串
Dim StrNow, StrTemp, Flag, I
Flag = False
For I = 1 To LenB(thedata)
If Flag = True Then
Flag = False
Else
StrNow = MidB(thedata, I, 1)
If AscB(StrNow) > 127 Then
StrTemp = StrTemp & Chr(AscW(MidB(thedata, I + 1, 1) & StrNow))
Flag = True
Else
StrTemp = StrTemp & Chr(AscB(StrNow))
End If
End If
Next
BinaryToString = StrTemp
End Function以上代码可以接收post数据,然后将post数据以二进制方式写入到目录,但为什么写出来的文件是无法执行的?
我估计是下面这句出错,但要怎么改才行呢???
ReDim DSX(data_len) As Byte
Function upload(op_file)Dim file_data, file_size, form_data, var_crlf, divider, data_start, data_end, data_len
Dim DSX() As Byte '为字节数组,用来存储读写内容
Dim FreeNO As Integer
FreeNO = FreeFile()file_size = MyRequest.TotalBytes
form_data = MyRequest.BinaryRead(file_size)
var_crlf = ChrB(13) & ChrB(10)
divider = LeftB(form_data, CInt(InStrB(form_data, var_crlf)) - 1)
data_start = InStrB(form_data, var_crlf) + 62
data_end = InStrB(data_start, form_data, var_crlf) - 2
data_len = data_end - data_start + 1
data_start = data_end + 18
data_end = InStrB(data_start, form_data, var_crlf & var_crlf) - 1
data_len = data_end - data_startOpen op_file For Binary Access Write As #FreeNO
ReDim DSX(data_len) As Byte '设置存储字节数组的大小
Put #FreeNO, , DSX()
Close #FreeNO
End Function
Function BinaryToString(thedata) '将二进制数据转换成字符串
Dim StrNow, StrTemp, Flag, I
Flag = False
For I = 1 To LenB(thedata)
If Flag = True Then
Flag = False
Else
StrNow = MidB(thedata, I, 1)
If AscB(StrNow) > 127 Then
StrTemp = StrTemp & Chr(AscW(MidB(thedata, I + 1, 1) & StrNow))
Flag = True
Else
StrTemp = StrTemp & Chr(AscB(StrNow))
End If
End If
Next
BinaryToString = StrTemp
End Function以上代码可以接收post数据,然后将post数据以二进制方式写入到目录,但为什么写出来的文件是无法执行的?
我估计是下面这句出错,但要怎么改才行呢???
ReDim DSX(data_len) As Byte
data_end = InStrB(data_start, form_data, var_crlf) - 2??
62是什么意思?你明明取得了ETAG(divider),却在后面代码里看不到使用的地方,看来你对POST的数据块结构还没吃透。
function getcontent(sample)
Dim beg,end_
beg=InstrB(1,sample,ChrB(13)&ChrB(10))
divstr=Midb(sample,1,beg-1)
beg=InstrB(1,sample,ChrB(13)&ChrB(10)&ChrB(13)&ChrB(10))+4
end_=InstrB(beg,sample,ChrB(13)&ChrB(10)&divstr)getcontent=Midb(sample,beg,end_-beg)
end function
form_data = MyRequest.BinaryRead(file_size)Open op_file For Binary Access Write As #FreeNO
Put #FreeNO, , GetContent(form_data)
Close #FreeNO
试试看,明确字节数。
Private MyRequest As Request
Private MyServer As ServerPublic Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyRequest = MyScriptingContext.Request
Set MyServer = MyScriptingContext.Server
End Sub
Function upload(op_file)Dim file_data, file_size, form_data, var_crlf, divider, data_start, data_end, data_len
Dim FreeNO As Integer
FreeNO = FreeFile()file_size = MyRequest.TotalBytes
form_data = MyRequest.BinaryRead(file_size)
var_crlf = ChrB(13) & ChrB(10)
divider = LeftB(form_data, CInt(InStrB(form_data, var_crlf)) - 1)
data_start = InStrB(form_data, var_crlf) + 62
data_end = InStrB(data_start, form_data, var_crlf) - 2
data_len = data_end - data_start + 1
data_start = data_end + 18
data_end = InStrB(data_start, form_data, var_crlf & var_crlf) - 1
data_len = data_end - data_startOpen op_file For Binary Access Write As #FreeNO
Put #FreeNO, LenB(GetContent(form_data)), GetContent(form_data)
'Put #FreeNO, , GetContent(form_data)
Close #FreeNO
End FunctionFunction GetContent(form_data)
Dim beg, end_, divstr
beg = InStrB(1, form_data, ChrB(13) & ChrB(10))
divstr = MidB(form_data, 1, beg - 1)
beg = InStrB(1, form_data, ChrB(13) & ChrB(10) & ChrB(13) & ChrB(10)) + 4
end_ = InStrB(beg, form_data, ChrB(13) & ChrB(10) & divstr)GetContent = MidB(form_data, beg, end_ - beg)
End Function
Public Sub OnEndPage()
Set MyScriptingContext = Nothing
Set MyRequest = Nothing
Set MyServer = Nothing
End Sub