我组件中的代码如下:
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

解决方案 »

  1.   

    ReDim DSX(data_len) As Byte ---->>>>>> ReDim  Preserve DSX(data_len) As Byte
      

  2.   

    根据上传的文件来生成文件啊,如果上传的是exe,生成的就是exe,上传的是图片文件,生成的就是同类型的图片文件。
      

  3.   

    ReDim DSX(data_len) 直接这样,不限制类型呢?
      

  4.   

    原来你这个是处理上传,怪不得说不用adodb.stream了
      

  5.   

    data_start = InStrB(form_data, var_crlf) + 62
    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
      

  6.   

    就是对post数据的结构不清楚,在网上也没搜索到相关的资料。上面这段代码是参考别人的修改过来的。getcontent函数是截取post数据中文件数的函数吗?我改成这样好像也不行file_size = MyRequest.TotalBytes
    form_data = MyRequest.BinaryRead(file_size)Open op_file For Binary Access Write As #FreeNO
    Put #FreeNO, , GetContent(form_data)
    Close #FreeNO
      

  7.   

    Put #FreeNO,lenb(GetContent(form_data)) , GetContent(form_data)
    试试看,明确字节数。
      

  8.   

    你用google搜索 宝玉 上传,有讲的
      

  9.   

    Put #FreeNO, LenB(GetContent(form_data)), GetContent(form_data)还是不行,put (文件句柄), (写入起始点), (写入的数据)---------------------------- 全部源码如下:--------------------------------------Option ExplicitPrivate MyScriptingContext As ScriptingContext
    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
      

  10.   

    去找一个 无组件 上传 的 asp 代码,改一下就行了