• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    为SWFUpload增加ASP版本的上传处理程序
    但也许是随着asp的逐渐淡出web开发,官方仅提供了.net、php等版本的上传处理程序,对于asp开发者来说则需要自行处理服务器端的数据接收。

    刚接触此组件时就被它功能强大与灵活方便吸引,由于当时项目采用asp开发,百度一番后发现并无好用的asp上传处理程序(现在有很多啦^^),看来只能自己研究开发啦,最初采用处理普通上传的方法来截取文件的数据,几经测试发现并不能有效接收组件传递过来的文件数据,无奈只能着手分析下它发送的数据形式,通过分析发现它发送的数据格式还是和普通上传存在一些区别的,无论是图片还是文件都是以octet-stream形式发送到服务器的,了解了数据格式,剩下的就是截取啦,下面把我的处理方法分享给需要的朋友,处理速度还算理想。
    复制代码 代码如下:

    %
    Class SWFUpload

    Private formData, folderPath, streamGet
    Private fileSize, chunkSize, bofCont, eofCont

    REM CLASS-INITIALIZE

    Private Sub Class_Initialize
    Call InitVariant
    Server.ScriptTimeOut = 1800
    Set streamGet = Server.CreateObject("ADODB.Stream")

    sAuthor = "51JS.COM-ZMM"
    sVersion = "Upload Class 1.0"
    End Sub

    REM CLASS-INITIALIZE

    Public Property Let SaveFolder(byVal sFolder)
    If Right(sFolder, 1) = "/" Then
    folderPath = sFolder
    Else
    folderPath = sFolder "/"
    End If
    End Property

    Public Property Get SaveFolder
    SaveFolder = folderPath
    End Property

    Private Function InitVariant
    chunkSize = 1024 * 128

    folderPath = "/" : fileSize = 1024 * 10
    bofCont = StrToByte("octet-stream" vbCrlf vbCrlf)
    eofCont = StrToByte(vbCrlf String(12, "-"))
    End Function

    Public Function GetUploadData
    Dim curRead : curRead = 0
    Dim dataLen : dataLen = Request.TotalBytes

    streamGet.Type = 1 : streamGet.Open
    Do While curRead dataLen
    Dim partLen : partLen = chunkSize
    If partLen + curRead > dataLen Then partLen = dataLen - curRead
    streamGet.Write Request.BinaryRead(partLen)
    curRead = curRead + partLen
    Loop
    streamGet.Position = 0
    formData = streamGet.Read(dataLen)

    Call GetUploadFile
    End Function

    Public Function GetUploadFile
    Dim begMark : begMark = StrToByte("filename=")
    Dim begPath : begPath = InStrB(1, formData, begMark ChrB(34)) + 10
    Dim endPath : endPath = InStrB(begPath, formData, ChrB(34))
    Dim cntPath : cntPath = MidB(formData, begPath, endPath - begPath)
    Dim cntName : cntName = folderPath GetClientName(cntPath)

    Dim begFile : begFile = InStrB(1, formData, bofCont) + 15
    Dim endFile : endFile = InStrB(begFile, formData, eofCont)

    Call SaveUploadFile(cntName, begFile, endFile - begFile)
    End Function

    Public Function SaveUploadFile(byVal fName, byVal bCont, byVal sLen)
    Dim filePath : filePath = Server.MapPath(fName)
    If CreateFolder("|", GetParentFolder(filePath)) Then
    streamGet.Position = bCont
    Set streamPut = Server.CreateObject("ADODB.Stream")
    streamPut.Type = 1 : streamPut.Mode = 3 : streamPut.Open
    streamPut.Write streamGet.Read(sLen)
    streamPut.SaveToFile filePath, 2
    streamPut.Close : Set streamPut = Nothing
    End If
    End Function

    Private Function IsNothing(byVal sVar)
    IsNothing = IsNull(sVar) Or (sVar = Empty)
    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 streamTmp
    Set streamTmp = Server.CreateObject("ADODB.Stream")
    streamTmp.Type = 2
    streamTmp.Mode = 3
    streamTmp.Open
    streamTmp.WriteText sByte
    streamTmp.Position = 0
    streamTmp.CharSet = "utf-8"
    streamTmp.Position = 2
    ByteToStr = streamTmp.ReadText
    streamTmp.Close
    Set streamTmp = Nothing
    End Function

    Private Function GetClientName(byVal bInfo)
    Dim sInfo, regEx
    sInfo = ByteToStr(bInfo)
    If IsNothing(sInfo) Then
    GetClientName = ""
    Else
    Set regEx = New RegExp
    regEx.Pattern = "^.*\\([^\\]+)$"
    regEx.Global = False
    regEx.IgnoreCase = True
    GetClientName = regEx.Replace(sInfo, "$1")
    Set regEx = Nothing
    End If
    End Function

    Private Function GetParentFolder(byVal sPath)
    Dim regEx
    Set regEx = New RegExp
    regEx.Pattern = "^(.*)\\[^\\]*$"
    regEx.Global = True
    regEx.IgnoreCase = True
    GetParentFolder = regEx.Replace(sPath, "$1")
    Set regEx = Nothing
    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

    REM CLASS-TERMINATE

    Private Sub Class_Terminate
    streamGet.Close
    Set streamGet = Nothing
    End Sub

    End Class

    REM 调用方法
    Dim oUpload
    Set oUpload = New SWFUpload
    oUpload.SaveFolder = "存放路径"
    oUpload.GetUploadData
    Set oUpload = Nothing
    %>
    您可能感兴趣的文章:
    • 使用SWFUpload实现无刷新上传图片
    • PHP swfupload图片上传的实例代码
    • SwfUpload在IE10上不出现上传按钮的解决方法
    • swfupload ajax无刷新上传图片实例代码
    • phpcms模块开发之swfupload的使用介绍
    • SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
    • swfupload 多文件上传实现代码
    • swfupload使用代码说明
    • 文件上传之SWFUpload插件(代码)
    • 文件上传插件SWFUpload的使用指南
    上一篇:Ajax跨域代理访问网络资源的实现代码
    下一篇:ASP页面静态化批量生成代码分享(多种方法)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    为SWFUpload增加ASP版本的上传处理程序 为,SWFUpload,增加,ASP,版本,