[導讀]要實現該功能,就要利用一些特制的文件上傳組件。文件上傳組件網頁非常多,這里介紹國際上非常有名的ASPUpload組件
1 下載和安裝ASPUpload
要實現該功能,就要利用一些特制的文件上傳組件。文件上傳組件網頁非常多,這里介紹國際上非常有名的ASPUpload組件,它的下載網址是:
http://www.persits.com/aspupload.exe
組件提供者網址是:
http://www.aspupload.com
注意:首先去掉要存放上傳文件的文件夾的只讀屬性,對於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集合包括所有上傳表單元素。