要实现该功能,就要利用一些特制的文件上传组件。文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件
1 下载和安装ASPUpload
要实现该功能,就要利用一些特制的文件上传组件。文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件,它的下载网址是: 组件提供者网址是: 注意:首先去掉要存放上传文件的文件夹的只读属性,对于Windows2000和Windows XP来说,如果安装时采用NTFS文件系统,还需要将该文件夹设置为EveryOne(任何人)可以完全控制。 按照上面的网址下载该组件后,直接双击下载文件,按照提示一步一步安装即可。安装完毕后,将默认生成"c:\Program Files\Persits Software\AspUpload"文件夹,里面有使用说明和例子。 2. 使用ASPUpload组件上传文件 该组件功能强大,不仅可以上传文件,还可以像普通表单一样上传一些表单元素值,这样就可以给上传的文件加一些说明文字。因为既有上传文件属性,又有上传表单属性,所以比较复杂,这里只介绍最常用的。 上传组件的常用属性如表8-2所示。 表8-2 上传组件的属性 上传组件的常用方法如表8-3所示。 表8-3 上传组件的方法上传表单元素的属性如表8-5所示。
表8-5 上传表单元素的属性
清单8-3 8-3.asp 上传文件表单
<html> <head> <title> 上传一个文件示例</title> </head> <body> <H2 align="center">上传一个文件</H2> <center> <form action="8-4.asp" method="post" enctype="multipart/form-data" > 选择文件:<input type="file" name="upfile"><br> 文件说明:<input type="text" name="intro" size="30"><br> 作者姓名:<input type="text" name="author" size="30"><br> <input type="submit" value=" 确定 "> </form> </center> </body> </html> 清单8-4 8-4.asp 上传文件执行程序 <% Option Explicit %> <html> <head> <title>上传一个文件示例</title> </head> <body> <H2 align="center">文件已安全上传</H2> <center> <% Dim Upload '声明一个变量 Set Upload = Server.CreateObject("Persits.Upload.1") '创建一个文件上传组件实例 Upload.SetMaxSize 2*1024*1024,False '限制文件不超过2M,否则截断 Upload.OverwriteFiles=True 'True表示可以覆盖 Upload.Save "C:\inetpub\wwwroot\asptemp\chapter8\upload" '上传到指定文件夹 Response.Write "上传文件为:" & Upload.Files("upfile").Path & "<BR>" Response.Write "文件大小为:" & Upload.Files("upfile").Size & "字节<BR>" Response.Write "文件说明为:" & Upload.Form("intro").value & "<BR>" Response.Write "作者姓名为:" & Upload.Form("author").value & "<BR>" %> </center> </body> </html> 程序说明: 1)注意8-3.asp中FORM表单的写法:<form action="8-4.asp" method="post" enctype="multipart/form-data" >,这里一定要写成enctype="multipart/form-data"。 2)还要注意,选择文件用的是FORM表单的选择文件元素:<input type="file" name="upfile"> 3)关于限制文件大小,Upload.SetMaxSize 2*1024*1024,False 表示限制文件大小为2MB;False表示如果文件超过2MB,则自动截断为2MB大小;如果改为True,则不自动截断,程序将报错误信息。 4)关于文件可以覆盖,Upload.OverwriteFiles=True表示如果文件名和原有的文件名字相同,则可以覆盖;False表示不可以覆盖,将自动另外起一个名字保存。默认为True。 5)关于文件保存路径,Upload.Save "C:\inetpub\wwwroot\asptemp\chapter11\upload" ,这里写的物理路径,也可以利用以前学过的Server对象的Mappath方法,此句可以写成:Upload.Save.Server.Mappath("upload") 。这样写,程序移植更方便。 6)还要特别注意的是,用于保存上传文件的文件夹必须是存在的;而且,如果服务器是Windows 2000或Windows NT操作系统,必须将该文件夹权限设置成所有人可以存取的,否则将无法上传文件。 7)在获取上传文件的属性时,用了Upload.Files("upfile").Path和Upload.Files("upfile").Size, 后面的Path和Size属性不可以省略,否则不清楚到底希望获取文件的什么属性。而获取表单元素时,用了 Upload.Form("intro").value,这时的Value属性是可以省略的。 在上面的例子里,一次只能上传一个文件,如果想一次上传多个文件页很容易,只要像在普通的FORM表单里加多个表单元素一样就可以了,请参考下面具体的例子。 清单8-5 8-5.asp 上传多个文件表单 <html> <head> <title> 上传多个文件示例</title> </head> <body> <H2 align="center">上传多个文件</H2> <center> <form action="8-6.asp" method="post" enctype="multipart/form-data" > 选择文件1:<input type="file" name=" upfile1"> 文件说明1:<input type=text name="intro1" size="30"><BR> 选择文件2:<input type="file" name="upfile2"> 文件说明2:<input type=text name="intro2" size="30"><BR> <input type="submit" value=" 确定 "> </form> </center> </body> </html> 清单8-6 8-6.asp 上传多个文件执行文件 <% Option Explicit %> <html> <head> <title> 上传多个文件示例</title> </head> <body> <H2 align="center">文件已安全上传</H2> <center> <% Dim Upload Set Upload = Server.CreateObject("Persits.Upload.1") Upload.Save Server.Mappath("upload") '上传到指定文件夹 Dim upfile,Item For Each upfile In Upload.Files '这里用一个循环写出所有文件的信息 Response.Write upfile.Name & "=" & upfile.Path & " (" & upfile.Size & ")<BR>" Next For Each Item In Upload.Form '这里用一个循环写出所有表单元素信息 Response.Write Item.Name & "=" & Item.Value & "<BR>" Next %> </center> </body> </html> 程序说明: 在上面的程序中没有像前一个例子一样一个一个写出上传文件和文件说明,而是用了一个For Each循环,效果是一样的。因为上传后,其实是传上来一个Files集合,一个Form集合。Files集合包括所有上传文件,Form集合包括所有上传表单元素。