标题:一个上传取得文件名的问题
只看楼主
tf0904
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:21
专家分:109
注 册:2012-12-14
结帖率:50%
 问题点数:0 回复次数:0 
一个上传取得文件名的问题
<%
    Class Upload
        Public  Form, Finished
        Private bVBCrlf, bSeparate, formData, cFields, folderPath, itemCount, sErrors, sAuthor, sVersion
        Private itemStart(), itemLength(), dataStart(), dataLength(), itemName(), itemData(), extenArr()
        Private Sub Class_Initialize      
            formData = Request.BinaryRead(Request.TotalBytes)
            Set Form = Server.CreateObject("Scripting.Dictionary")
            sAuthor = "
            sVersion = "Upload Class 1.0"
        End Sub
        
        Public Property Get ErrMessage
            ErrMessage = sErrors
        End Property
 
        Public Property Get Author
            Author = sAuthor
        End Property

        Public Property Get Version
            Version = sVersion
        End Property

        Public Property Let CheckFields(byVal sCheck)
            cFields = sCheck
        End Property

        Public Property Let Folder(byVal sFolder)
            folderPath = sFolder
        End Property

        Public Function Start
            Finished = False
            bVBCrlf = StrToByte(vbCrlf & vbCrlf)
            bSeparate = StrToByte("-----------------------------")
            itemCount = 0
            sErrors = ""
            Call ItemPosition
        End Function

        Private Function ItemPosition
            Dim iStart, iLength : iStart = 1        
            Do Until InStrB(iStart, formData, bSeparate) = 0
               iStart = InStrB(iStart, formData, bSeparate) + LenB(bSeparate) + 14
               iLength = InStrB(iStart, formData, bSeparate) - iStart - 2
               If Abs(iStart + 2 - LenB(formData)) > 2 Then
                  ReDim Preserve itemStart(itemCount)
                  ReDim Preserve itemLength(itemCount)
                  itemStart(itemCount) = iStart
                  itemLength(itemCount) = iLength
                  itemCount = itemCount + 1
               End If
            Loop
            Call FillItemValue
        End Function

        Private Function FillItemValue
            Dim dataPart, bInfor
            Dim iStart : iStart = 1
            Dim iCount : iCount = 0
            Dim iCheck : iCheck = StrToByte("filename")
            For i = 0 To itemCount - 1
                ReDim Preserve itemName(iCount)
                ReDim Preserve itemData(iCount)
                ReDim Preserve extenArr(iCount)
                ReDim Preserve dataStart(iCount)
                ReDim Preserve dataLength(iCount)
                dataPart = MidB(formData, itemStart(i), itemLength(i))
                iStart = InStrB(1, dataPart, ChrB(34)) + 1
                iLength = InStrB(iStart, dataPart, ChrB(34)) - iStart
                itemName(iCount) = FormItemName(MidB(dataPart, iStart, iLength))
                iStart = InStrB(1, dataPart, bVBCrlf) + 4
                iLength = LenB(dataPart) - iStart + 1
                If InStrB(1, dataPart, iCheck) > 0 Then
                   bInfor = MidB(dataPart, 1, iStart - 5)
                   extenArr(iCount) = FileExtenName(bInfor)
                   If Mid(folderPath, Len(folderPath) - 1) = "/" Then
                      itemData(iCount) = folderPath & GetRndName(6) & extenArr(iCount)        
                   Else
                      itemData(iCount) = folderPath & "/" & GetRndName(6) & extenArr(iCount)
                      if itemData(iCount)<>"" then
                      attach_name=itemdata(iCount)
                      Response.Write "<script language=javascript>alert('"&attach_name&"!');</script>"
                      end if
                   End If
                   dataStart(iCount) = itemStart(i) + iStart - 2
                   dataLength(iCount) = iLength
                Else
                   extenArr(iCount) = ""
                   itemData(iCount) = ByteToStr(MidB(dataPart, iStart, iLength))
                   dataStart(iCount) = ""
                   dataLength(iCount) = ""
                End If
                iCount = iCount + 1
            Next
            Call SaveUpload
        End Function

        Private Function FormItemName(byVal bName)
            FormItemName = ByteToStr(bName)
        End Function

        Private Function FileExtenName(byVal bInfor)
            Dim pStart, pLength, pContent, regEx
            pStart = InStr(1, ByteToStr(bInfor), "filename=" & Chr(34)) + 10
            pLength = InStr(pStart, ByteToStr(bInfor), Chr(34)) - pStart
            pContent = Mid(ByteToStr(bInfor), pStart, pLength)
            If pContent = "" Then
               FileExtenName = ""
            Else
               Set regEx = New RegExp
               regEx.Pattern = "^.*(\.[^\.]*)$"
               regEx.Global = False
               regEx.IgnoreCase = True
               FileExtenName = regEx.Replace(pContent, "$1")
               Set regEx = Nothing               
            End If        
        End Function

        Private Function GetRndName(byVal sLen)
            Dim regEx, sTemp, arrFields, n : n = 0
            Set regEx = New RegExp
            regEx.Pattern = "[^\d]*"
            regEx.Global = True
            regEx.IgnoreCase = True
            sTemp = regEx.Replace(Now, "") & "-"
            Set regEx = Nothing         
            arrFields = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
                              "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
                              "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", _
                              "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", _
                              "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", _
                              "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", _
                              "Y", "Z")
            Randomize
            Do While n < sLen
               sTemp = sTemp & CStr(arrFields(61 * Rnd))
               n = n + 1
            Loop
            GetRndName = sTemp
        End Function

        Private Function SaveUpload
            Dim isValidate
            Dim filePath, oStreamGet, oStreamPut
            isValidate = CheckFile
            If isValidate Then
               For i = 0 To itemCount - 1
                   If (dataStart(i) <> "") And (dataLength(i) <> "") Then
                       If dataLength(i) = 0 Then
                          itemData(i) = ""
                       Else
                          filePath = Server.MapPath(itemData(i))
                          If CreateFolder("|", ParentFolder(filePath)) Then                          
                             Set oStreamGet = Server.CreateObject("ADODB.Stream")
                             oStreamGet.Type = 1
                             oStreamGet.Mode = 3
                             oStreamGet.Open
                             oStreamGet.Write formData
                             oStreamGet.Position = dataStart(i)
                             Set oStreamPut = Server.CreateObject("ADODB.Stream")
                             oStreamPut.Type = 1
                             oStreamPut.Mode = 3
                             oStreamPut.Open
                             oStreamPut.Write oStreamGet.Read(dataLength(i))
                             oStreamPut.SaveToFile(filePath)
                             oStreamGet.Close
                             Set oStreamGet = Nothing
                             oStreamPut.Close
                             Set oStreamPut = Nothing
                          End If  
                       End If                  
                   End If
               Next
               Finished = True
               Call ItemToColl
            Else               
               Finished = False
            End If
        End Function

        Private Function CheckFile
            Dim oBoolean : oBoolean = True
            If cFields = "" Then
               oBoolean = oBoolean And True
            Else
               For i = 0 To itemCount - 1
                   If extenArr(i) <> "" Then
                      If InStr(1, Ucase(cFields), "|" & Ucase(Mid(extenArr(i), 2)) & "|") > 0 Then
                         oBoolean = oBoolean And True
                      Else
                         sErrors = sErrors & "表单[ " & itemName(i) & " ]的文件格式错误!\n" & _
                                             "支持的格式为:" & Replace(Mid(cFields, 2, Len(cFields) - 1), "|", " ") & "\n\n"
                         oBoolean = oBoolean And False     
                      End If
                   End If
               Next
            End If
            CheckFile = oBoolean
        End Function

        Private Function CreateFolder(byVal sLine, byVal sPath)
            Dim oFso
            Set oFso = Server.CreateObject("Scripting.FileSystemObject")
            If Not oFso.FolderExists(sPath) Then
               Dim regEx
               Set regEx = New RegExp
               regEx.Pattern = "^(.*)\\([^\\]*)$"
               regEx.Global = False
               regEx.IgnoreCase = True   
               sLine = sLine & regEx.Replace(sPath, "$2") & "|"
               sPath = regEx.Replace(sPath, "$1")     
               If CreateFolder(sLine, sPath) Then CreateFolder = True
               Set regEx = Nothing
            Else
               If sLine = "|" Then
                  CreateFolder = True
               Else
                  Dim sTemp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
                  If InStrRev(sTemp, "|") = 0 Then
                     sLine = "|"
                     sPath = sPath & "\" & sTemp            
                  Else
                     Dim Folder : Folder = Mid(sTemp, InStrRev(sTemp, "|") + 1)
                     sLine = "|" & Mid(sTemp, 1, InStrRev(sTemp, "|") - 1) & "|"
                     sPath = sPath & "\" & Folder
                  End If
                  oFso.CreateFolder sPath
                  If CreateFolder(sLine, sPath) Then CreateFolder = True            
               End if
            End If
            Set oFso = Nothing  
        End Function

        Function ParentFolder(byVal sPath)
            Dim regEx
            Set regEx = New RegExp
            regEx.Pattern = "^(.*)\\[^\\]*$"
            regEx.Global = True
            regEx.IgnoreCase = True
            ParentFolder = regEx.Replace(sPath, "$1")
            Set regEx = Nothing            
        End Function

        Private Function StrToByte(byVal sText)
            For i = 1 To Len(sText)                       
                StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))   
            Next
        End Function

        Private Function ByteToStr(byVal sByte)
            Dim oStream
            Set oStream = Server.CreateObject("ADODB.Stream")
            oStream.Type = 2
            oStream.Mode = 3
            oStream.Open
            oStream.WriteText sByte
            oStream.Position = 0
            oStream.CharSet = "gb2312"
            oStream.Position = 2
            ByteToStr = oStream.ReadText
            oStream.Close
            Set oStream = Nothing         
        End Function

        Private Function ItemToColl
            For i = 0 To itemCount - 1
                If Not Form.Exists(itemName(i)) Then
                   Form.Add itemName(i), itemData(i)
                End If
            Next
        End Function

        Private Sub Class_Terminate
            Form.RemoveAll
            Set Form = Nothing
        End Sub
    End Class

    If Request.ServerVariables("REQUEST_METHOD") = "POST"  Then
       Rem 建立上传类实例      
       Set oUpload = New Upload
       Rem 指定允许上传文件的类型
       oUpload.CheckFields = "|GIF|BMP|JPG|txt|doc|xls|docx|xlsx|"
       Rem 指定上传文件所存储的相对路径
       oUpload.Folder = "UploadFile"
       Rem 开始上传处理
       oUpload.Start
       If oUpload.Finished Then
          Rem 上传成功,显示上传信息
          'Dim sHtml : sHtml = ""
          'sHtml = sHtml & "<center>"
          'sHtml = sHtml & "<div style=""width: 600px;height: 500px;font-size: 10pt;border: 1px solid highlight;overflow: auto;"" align=""left"">"
          'sHtml = sHtml & "<center style=""font-size: 15pt;color: red;"">上传表单数据</center><br>"
         'sHtml = sHtml & "标题:<br>" & oUpload.Form("P_title") & "<br><br><br>"
          'sHtml = sHtml & "类型:<br>" & oUpload.Form("P_assort") & "<br><br><br>"
          'sHtml = sHtml & "小图:<br>服务器端路径:<a href=""" & oUpload.Form("P_p_w_picpath_s") & """ target=""_blank"">" & oUpload.Form("P_p_w_picpath_s") & "</a><br><img src=""" & oUpload.Form("P_p_w_picpath_s") & """><br><br><br>"
          'sHtml = sHtml & "中图:<br>服务器端路径:<a href=""" & oUpload.Form("P_p_w_picpath_m") & """ target=""_blank"">" & oUpload.Form("P_p_w_picpath_m") & "</a><br><img src=""" & oUpload.Form("P_p_w_picpath_m") & """><br><br><br>"
          'sHtml = sHtml & "大图:<br>服务器端路径:<a href=""" & oUpload.Form("P_p_w_picpath_b") & """ target=""_blank"">" & oUpload.Form("P_p_w_picpath_b") & "</a><br><img src=""" & oUpload.Form("P_p_w_picpath_b") & """><br><br><br>"
          'sHtml = sHtml & "介绍:<br>" & oUpload.Form("P_content") & "<br>"                  
         ' sHtml = sHtml & "</div>"
          'sHtml = sHtml & "</center>"
input_str="text_input.asp?attach_status=add&attach_name="&attach_name
input_d_str=""
for k=1 to 40
input_in="t"&k
input_value=oUpload.Form("t"&k&"")
input_d_value=oUpload.Form("d"&k&"")
input_str=input_str&"&"
input_d_str=input_d_str&"&"
input_d_str=input_d_str&"d"&k&"="&input_d_value
input_str=input_str&"t"&k&"="&input_value
next
          Response.Write "<script language=javascript>alert('"&attach_name&"附件添加成功!');location.href='"&input_str&input_d_str&"';</script>"
          Response.End
         
       Else
          Rem 上传失败,显示错误信息
          Call ShowMsg(oUpload.ErrMessage, Request.ServerVariables("SCRIPT_NAME"))
       End If
       Rem 对话框提示函数
       Function ShowMsg(byVal sText, byVal sTarget)
           Dim sScript : sScript = ""
           sScript = sScript & "<script language=""javascript"">" & vbCrlf & _
                               "window.alert('" & sText & "');" & vbCrlf & _
                               "window.location.replace('" & sTarget & "');" & vbCrlf & _
                               "</script>"
           Response.Write sScript
           Response.End
       End Function         
    End If

%>

在这段代码里我想获得文件名 但是在FUNCTION里我设置了参数attach_name response的结果没问题 为什么整个UPDTAE结束后 这个参数却为空哪?
2013-01-14 10:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-396517-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058217 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved