• ASPSmartUpload祥解


    文件上传对于网站后台管理而言是一个很重要的功能。我们在上传文件的同时,可以把文件名、文件类型、版本、文件大小、下载路径、文件说明等相关信息保存在数据库中,用数据库的强大功能来管理各种类型的文件,包括对
    文件进行关键字匹配检索。

    目前使用得最广泛的网页开发技术非微软的ASP莫属,但遗憾的是ASP却没有文件上传功能,我们只能通过第三方组件来实现。事实上,的确有不少组件可以支持ASP文件上传,甚至还有开发者研究出了无组件上传的方法。但纵观这些技术,总有这样或那样的缺点,要么使用太复杂,不易控制;要么需要付费,免费的功能太简单,无法深入地控制。

    笔者在本文里向大家介绍的这款文件上传组件----ASPSmartUpload,是由ASPSmart公司开发的,它功能强大,更重要的是它是完全免费的,非常符合我们“不花钱、多办事”的要求,是一个非常优秀的文件上传组件。简要地说,它有如下特点:

    ● 可限制上传单一文件的大小及多个文件的全部大小

    ● 一次可上传多个文件

    ● 可同时传送一般的表彰字段与文件

    ● 可将上传文件(如图形文件、ZIP文件等)写入数据库

    ● 可限制上传文件的类型

    ● 允许从数据库或文件取回先前上传的内容

    下面我们先来看一看ASPSmartUpload对象的使用方法和属性。

    一、 注册ASPSmartUpload组件

    要在ASP页面中使用ASPSmartUpload组件,首先需要在使用它的机器上注册。注册的步骤很简单:

    1、 将下载的ASPSmartUpload.zip解压缩到某个目录,如c:\temp,由于ASPSmartUpload无法自动安装,所以在找到ASPSmartUpload.dll之后,需要手工在DOS方式下或“开始/运行”键入命令:

    regsvr32.exe c:\temp\ASPSmartUpload.dll

    系统会弹出一个窗口显示成功注册信息。

    2、 接下来复制另一个dll文件ASPSmartUploadUtil.dll到windows\system32目录下,此时就完成了ASPSmartUpload组件的注册与安装。

    二、 ASPSmartUpload对象简介

    1、SmartUpload对象的属性和方法

    SmartUpload对象可以在ASP中直接被创建,其语法为:

    Set myUpload = server.CreateObject(“ASPSmartUpload.SmartUpload”)

    myUpload.Collections | Properties | Methods

    SmartUpload对象的主要属性与方法一览表:

    属性/方法
    说明

    属性

    TotalMaxFileSize
    允许上传的全部文件的大小

    MaxFileSize
    允许上传的单个文件的大小

    AllowedFilesList
    允许上传的文件类型列表

    DeniedFilesList
    禁止上传的文件类型列表

    DownloadBlockSize
    一次读取文件的大小

    TotalBytes
    POST表单中的大小(以字节为单位)

    方法

    Upload
    上传POST表单

    Save
    保存上传文件到指定目录

    DownloadFile
    下载一个文件

    DownloadField
    从数据库中下载先前上传的文件

    FieldToFile
    将文件上传到数据库中

    UploadInFile
    将POST表单保存到文件中


    SmartUpload有两个集合,分别是Files集合和Form集合,其层次关系为:

    ASPSmartUpload

    l   Files

    n   file

    l   Form

       n   item

    2、Files对象的属性和方法

    myFiles.Collection | Properties | Method

    它只有一个集合,为file集合。

    Files对象的主要属性与方法一览表:

    属性/方法
    说明

    属性

    Count
    文件对象的个数

    TotalBytes
    文件集合的大小(以字节为单位)

    方法

    Item(ID)
    缺省方法,返回指定带有指定ID的文件对象



    File对象的调用语法:

    myFile.Properties | Methods

    file对象的主要属性与方法一览表:

    属性/方法
    说明

    属性

    Name
    POST表单项名

    FileName
    用户键入的文件名

    FileExt
    用户键入的文件后缀

    FilePathName
    用户键入的文件路径

    ContentType
    用户键入的文件类型

    Size
    文件大小

    IsMissing
    若未指定文件则为真

    TypeMIME
    用户键入的MIME类型

    Count
    文件对象的个数

    TotalBytes
    文件集合的大小(以字节为单位)

    方法

    SaveAs
    保存文件(覆盖文件名相同的文件)

    FileToField
    上传文件到数据库



    三、 多个文件上传

    对ASPSmartUpload组件及其属性方法有了初步的了解后,我们来动手开发一个允许多个文件上传的页面,在上传的同时还可以给各个文件加上说明。

    一般的HTML标记即可上传文件,只要将FORM标记的ENCTYPE属性赋为“multipart/form-data”值即可。在下面的例子中,我们最多可以同时上传四个文件。我们假定上传目录为当前目录下的upload子目录,由于要往upload目录中写入文件,因此必须将该目录中everyone的安全权限设为“修改”或“完全控制”。

    表单文件upload_1.htm:

    <script language=vbscript>

    sub datacheck()

    if upload.file01.value = Empty then

    MsgBox "文件名不能为空!",64,"Oh no!"

    focusto(0)

    exit sub

    end if

    upload.submit

    end sub

    sub focusto(x)

    document.upload.elements(x).focus()

    end sub

    </script>


    <body>

    <form method="post" name="upload" action="upload_1.asp" enctype="multipart/form-data">

    文件名:<input type=file size=50 name="file01"><br>

    说明:<input type=text size=50 name="disc1"><p>

    文件名:<input type=file size=50 name="file02"><br>

    说明:<input type=text size=50 name="disc2"><p>

    文件名:<input type=file size=50 name="file03"><br>

    说明:<input type=text size=50 name="disc3"><p>

    文件名:<input type=file size=50 name="file04"><br>

    说明:<input type=text size=50 name="disc4"><p>

    <input type=button value="upload now!" onclick="datacheck">

    </form>

    在用户指定文件名、按了“upload now!”按钮后,会激发后端的ASP程序upload_1.asp实现上传操作,代码见下。笔者在代码中添加了详细的注释,相信应该不难理解。

    文件upload_1.asp:

    <%

    sub show_files()

    on Error Resume Next

    '定义上传目录

    const dirUpload = "upload"

    set objUpload = server.CreateObject("aspSmartUpload.SmartUpload")

    '限制最大上传字节数

    objUpload.TotalMaxFileSize = 300000

    ‘限制文件上传类型为文本与图象

    'objUpload.AllowedFilesList = "txt,jpg,gif"

    ‘文件上传

    objUpload.Upload

    '保存文件在upload目录,同时取得上传的文件数

    intNo = objUpload.save(dirUpload)

    ‘如果Err值=0,则说明上传成功

    if Err <> 0 then

    response.write "上传文件错误: <font color=ff0000>"&Err.Description&"</font>"

    else

    response.write "共上传了 <font color=ff0000><b>"&intNo&"</b></font> 个文件!<p>"

    response.write "分别是:<br>"

    nPoint = 1

    ‘遍历files集合,取出上传文件的属性

    for each thefile in objUpload.files

    '如果上传文件不为空

    if thefile.fileName <> Empty then

    '先输出FORM中的input名,如file01、file02等

    response.write thefile.Name&" = <font color=0000ff><b>"

    '输出文件名(不含路径)

    response.write thefile.fileName&" </b></font>("

    '输出各个文件的字节数

    response.write FormatNumber(thefile.size,0)&"bytes)<br>"

    response.write "说明:<font color=silver>"&objUpload.Form.Item("disc"&nPoint)&"</font><p>"

    nPoint = nPoint+1

    end if

    Next

    response.write "<p>上传总字节数:"&"<font color=0000ff><b>"&objUpload.files.Totalbytes&"</b></font><br>"

    response.write "可上传的最大文件数:"&"<font color=0000ff><b>"&objUpload.files.count&"</b></font><br>"

    response.write "<hr>"

    end if

    end sub

    %>

    <body>

    <% show_files %>

    </body>

    四、 上传文件到数据库

    上面的例子是将文件上传到服务器的目录中。ASPSmartUpload组件还支持将文件上传到数据库。笔者以图象文件为例,向大家详细讲解如何将文件上传到SQL Server数据库。我们假定数据库所在服务器的IP地址为10.98.3.2,上传文件保存在数据库ASP的upload表中。

    表单文件:upload_2.htm

    <script language="VBScript">

    dim intType

    sub datacheck()

    dim strType

    if upload.file1.value = Empty then

    MsgBox "文件名不能为空!",64,"Oh no!"

    focusto(0)

    Exit sub

    end if

    ‘通过单选钮的值来判断用户输入的文件类型是否为用户选中的类型

    if upload.file1.value <> Empty then

    select case intType

    case 2

    strType = "jpg"

    case 3

    strType = "bmp"

    case else

    strType = "gif"

    end select

    ‘将用户输入的文件名的后缀与选中的文件类型相比,如果不同,则用户需要上传的文件类型与

    ‘用户在单选钮中选中的类型不相同,拒绝上传。

    if lCase(right(Trim(upload.file1.value),3)) <> strType then

    Msgbox "选取的图形文件格式("&strType&") 不相符!",64,"oh no!"

    focusto(3)

    Exit Sub

    end if

    end if

    upload.submit

    end sub


    sub focusto(x)

    document.upload.elements(x).focus()

    end sub

    </script>

    <body>

    <div align=center>上传图片到数据库</div>

    <p>

    <form method="post" name="upload" action="upload_2.asp" enctype="multipart/form-data">

    图形文件类型:

    <input type=radio name=itype value="gif" onClick="intType=1" checked> GIF  

    <input type=radio name=itype value="jpg" onClick="intType=2"> JPG  

    <input type=radio name=itype value="bmp" onClick="intType=3"> BMP   

    文件名:<input type=file size=50 name="file1"><br>

    文本说明:<input type=text size=50 name="desc1"><hr>

    文件名:<input type=file size=50 name="file2"><br>

    文本说明:<input type=text size=50 name="desc2"><hr>

    文件名:<input type=file size=50 name="file3"><br>

    文本说明:<input type=text size=50 name="desc3"><hr>

    文件名:<input type=file size=50 name="file4"><br>

    文本说明:<input type=text size=50 name="desc4"><hr>

    <input type=button value="上传文件" onclick="datacheck">

    </form>

    upload_2.asp文件:

    <%

    dim strDSN,adocon

    sub insert_DB()

    const dirUpload = "upload"

    set objUpload = Server.CreateObject("AspSmartUpload.SmartUpload")

    '单个文件最大为100K

    objUpload.MaxFileSize = 100000

    objUpload.upload

    '保存文件,并取出实际上传的文件数

    intNo = objUpload.save(dirUpload)

    on Error Resume Next

    '数据源字串

    strDSN = "Driver={SQL Server};Server=10.98.3.2;uid=sa;pwd=;database=asp;autotranslate=no;"

    '取出文件类型

    strType = objUpload.form("itype")


    '通过SELECT获得最新的ID值

    newid = get_NewID(strDSN)


    '将初始的ID值作个备份,在屏幕上显示时会用到

    newid_list = newid


    set rs = Server.CreateObject("ADODB.RecordSet")

    rs.open "upload",adocon,1,3

    nCount = 1

    for each file in objUpload.files

    '如果没有指定文件,则 file.IsMissing 为真

    if not file.IsMissing then

    ‘添加一条记录

    rs.addnew

    rs("id") = newid

    rs("path") = file.FileName

    rs("descrp") = objUpload.Form("desc"&nCount)

    rs("trans_date") = now

    rs("imgtype") = strType

    ‘利用file的FileToField方法将文件保存在数据库中

    file.FileToField rs("urimage")

    rs.update

    newid = newid+1

    nCount = nCount+1

    end if

    Next

    rs.close:set rs = nothing


    if Err <> 0 then

    Response.write "上传文件错误: <font color=ff0000>"&Err.Description&"</font>"

    else

    response.write "上传成功!<p>文件是:<br>"

    for each file in objUpload.files

    if file.filename <> Empty then

    response.write "ID = <font color=ff0000>"&newid_list&"</font>,"

    response.write file.name&" = <font color=0000ff><b>"&file.filename&"</b></font> ("&formatNumber(File.size,0)&" bytes)<br>"

    newid_list = newid_list+1

    end if

    next

    response.write "<hr>"

    end if

    end sub


    ‘取出表upload中的最大ID值

    function get_NewID(strDSN)

    set adocon = Server.CreateObject("ADODB.Connection")

    adocon.open strDSN

    set rs1 = adocon.Execute("select id from upload order by id desc")

    if not rs1.eof then

    get_newID = rs1("id")+1

    else

    get_NewID = 1

    end if

    rs1.close:set rs1 = nothing

    end function

    %>

    <body>


    <% insert_DB %>


    通过上面的例子可以看出,用ASPSmartUpload组件进行文件上传,其实只需要三行语句:

    set objUpload = Server.CreateObject("AspSmartUpload.SmartUpload")

    objUpload.upload

    intNo = objUpload.save(“upload”)

    如果您对文件上传的控制不是很严格,那么只需要这三条语句就可以了。如果您想对上传进行严格的控制管理,如限制上传文件的大小、文件类型、存放目录等,ASPSmartUpload组件也完全能够做得到。再配合数据库,您可以对文件上传实行账号权限管理,严格分发各个账户所具有的不同的上传权力,避免恶意用户无限制地上传垃圾文件继而堵塞网络,撑爆服务器硬盘,充分保证网络的畅通与服务器的安全。

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Thymeleaf介绍和基本语法使用
    2020版idea及没有default Settings设置的idea,修改默认maven设置、本地仓库的方法
    创建springboot项目的两种方式
    2020版IDEA新建打开*.vue文件
    IDEA新手常用快捷键
    搭建一个maven的web项目
    eclipse、idea引入外部jar包教程
    序列化笔记
    转换流笔记
    缓冲流笔记
  • 原文地址:https://www.cnblogs.com/Athrun/p/1383465.html
Copyright © 2020-2023  润新知