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

2015-01-20  来源:本站原创  分类:应用技巧  人气:3 

SWFUpload上传组件,最初由Vinterwebb.se开发,组件主体由Flash与JavaScript整合而成,主要致力解决多文件、大文件等的上传问题,组件提供了丰富的事件与接口方便web开发者调用,开发者可以通过js与css等很方便的控制样式和实现想要的上传效果。

但也许是随着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增加ASP版本的上传处理程序 2015-01-20

    SWFUpload上传组件,最初由Vinterwebb.se开发,组件主体由Flash与JavaScript整合而成,主要致力解决多文件.大文件等的上传问题,组件提供了丰富的事件与接口方便web开发者调用,开发者可以通过js与css等很方便的控制样式和实现想要的上传效果. 但也许是随着asp的逐渐淡出web开发,官方仅提供了.net.php等版本的上传处理程序,对于asp开发者来说则需要自行处理服务器端的数据接收. 刚接触此组件时就被它功能强大与灵活方便吸引,由于当时项目采用asp开发,百度一番

  • asp.net文件上传示例分享 2014-10-01

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法,需要的朋友可以参考下 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: <form id="form1" runat="server"> <asp:FileUpload ID="FileUpload1" runat="server" /> <

  • asp.net 文件上传实例汇总 2015-02-06

    文件上传在asp.net中有很多方法,这里我很给各位介绍最简单最方便的.net文件上传实例,希望给各位.net入门者带来帮助 ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: <form id="form1" runat="server"> <asp:FileUpload ID="

  • ASP.NET解决上传大文件问题的方法 2014-04-21

    ASP.NET解决上传大文件问题的方法,需要的朋友可以参考一下 上传文件的控件为:FileUpload Asp.Net对上传文件大小有限制.默认情况下用户只能上传4MB大小的文件,这会给用户带来不便.所以如果要上传40MB大小的文件.只能修改配置文件 关键代码如下 protected void btnSend_Click(object sender, EventArgs e) { try { //上传文件的思路: //获取上传文件的名称,此时为一个全路径的地址 string upFileName

  • asp.net解决上传4M文件限制 2014-07-01

    只需要在服务器上修改如下文件就可以使asp.net突破上传4M文件的限制,大家参考使用吧 需要在服务器上修改如下文件 在目录C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG中找到web.config文件.这里的服务器是64位的,如果是32位则目录是C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG 在web.config中找到如下内容 <system.web> <author

  • ASP.net判断上传文件类型的三种有效方法 2014-07-22

    这篇文章主要介绍了用ASP.net判断上传文件类型的三种方法,需要的朋友可以参考下 一.安全性比较低,把文本文件1.txt改成1.jpg照样可以上传,但其实现方法容易理解,实现也简单,所以网上很多还是采取这种方法. Boolean fileOk = false; string path = Server.MapPath("~/images/"); //判断是否已经选取文件 if (FileUpload1.HasFile) { //取得文件的扩展名,并转换成小写 string fileE

  • Asp.net图片上传实现预览效果的简单代码 2015-03-20

    这篇文章介绍了Asp.net图片上传实现预览效果的简单代码,有需要的朋友可以参考一下 在页面上放入一个上传控件和一个图片控件. <asp:FileUpload ID="FileUpload1" runat="server" onpropertychange="show(this.value)"/> <asp:Image ID="Image1" runat="server" /> 在上

  • SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享 2014-01-15

    问题:swfupload上传任何文件的mime类型均为application/octet-stream. 解决方案如下,其它框架雷同. 源代码(/system/libraries/upload.php 199 line) $this->file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES[$field]['type']); 修改成如下: //Edit By Tacker if(function_exis

  • Asp无组件上传进度条解决方案 2014-03-06

    一.无组件上传的原理 我还是一点一点用一个实例来说明的吧,客户端HTML如下.要浏览上传附件,我们通过<input type="file">元素,但是一定要注意必须设置form的enctype属性为"multipart/form-data": <form method="post" action="upload.asp" enctype="multipart/form-data">

  • asp fckeditor自定义上传文件的文件名 2014-05-17

    上传文件时如果遇到中文就很麻烦,但又不能让用户自己把文件名改后再上传,所以直接把文件名自动生成了一下. 只需要在fckeditor\editor\filemanager\connectors\asp文件夹下的commands.asp修改一下即可 在这个文件中查找一下:FileUpload 会找到这个函数 把 Dim sFilePath sFilePath = CombineLocalPaths(sServerDir, sFileName) 改为 复制代码 代码如下: Dim sFilePath,

  • 收藏的asp.net文件上传类源码 2014-06-22

    namespace Wmj { public class MyUpload { private System.Web.HttpPostedFile postedFile=null; private string savePath=""; private string extension=""; private int fileLength=0; //显示该组件使用的参数信息 public string Help { get{ string helpstring; h

  • asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输 2014-06-27

    众所周知微软所提供的updatepanel不能支持文件上传的异步刷新,但是往往当你在项目中的其他页面实现了异步刷新之后,客户就会问你为什么有文件上传的页面就不能实现异步刷新呢?这时我们可能说一堆理由,但是最后大部分还是会妥协于客户. 具体我们如何实现文件的异步刷新,目前网上已经有了很多文章来解决这个问题,但是会用到大量的javascript,由于本人编码功力尚浅,所以之今没有高清其中的所以然,但是在解决的方案中他们貌似都用到了iframe,这让我茅塞顿开,所以我就说说用这个处理刷新的思路. 首先

  • Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印) 2014-08-21

    Asp.net 取得文件后缀名,保存文件,加入文字水印的代码类 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web

  • asp.net图片上传实例 2014-11-19

    网站后台都需要有上传图片的功能,下面的例子就是实现有关图片上传.缺点:图片上传到本服务器上,不适合大量图片上传 第一.图片上传,代码如下: xxx.aspx <td class="style1"> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server"

  • 用Html5与Asp.net MVC上传多个文件的实现代码 2015-01-06

    Html 5 的有一些File API,对Form表单增强的特性,让我们轻松支持多文件上传,看下面的Html片断代码 <form action="/Home/Upload" enctype="multipart/form-data" id="form2" method="post"> <input type="file" name="fileToUpload" id=&

  • asp.net实现上传文件显示本地绝对路径的实例代码 2015-03-30

    asp.net实现上传图片显示本地绝对路径图片,其实这个还是得用<DIV></DIV>去显示图片会更好一点!用js实现图片的比例压缩让图片一样能够很清楚!下面把代码贴出来 页面代码主要就是JS view plaincopy to clipboardprint <head runat="server"> <title>无标题页</title> <mce:script language="javascript&qu

  • stm 后缀名 asp ssi 调试 上传 木马 2012-03-09

    stm是一种文件后缀名 在浏览器中请求test.stm,没有什么反映,一片空白.但是一查看源代码,会发现是文件的真实内容,如果是ASP文件,则可以查看ASP的源码. 看下IIS服务器/主目录/配置/映射/stm,发现IIS解析此后缀名的文件是C:/WINDOWS/system32/inetsrv/ssinc.dll 也就是服务器端包含. 利用这个特性可以调试ASP程序,如一个asp文件,里面包含了很多的include file="",你想看看有没有重复或其它,可以将此文件后缀名改为st

  • ASP.NET在上传文件时对文件类型的高级判断的代码 2014-07-07

    在上传文件过程中,可以通过修改扩展名来逃过文件类型的判断并实现上传,就需要可以验证究竟是什么文件.下面的代码大家可以测试下. using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; u

  • asp.net 文件上传 实时进度 2014-05-30

    在swfupload的基础上增加一些个性化东西.附图2张. 代码下载

  • ASP程序给上传的图片增添水印效果! 2014-07-08

    ASPJPEG是Persits出品的共享软件,试用期为30天,您可以在这里下载:http://www.persits.com/aspjpeg.exe. 最新版本号是1.3 ========================================= <% sub jpegclass(imgurl,fontsize,family,isbold,top,left,content,Horflip) '调用过程名 Dim Jpeg,font_color,font_size,font_family,