亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用兩行代碼在瀏覽器中實現文件上傳

2019-11-18 21:47:42
字體:
來源:轉載
供稿:網友
簡介
文件上傳是將任意的文件從客戶機發送到服務器的過程。最簡單、最方便的上傳方法是使用支持RFC1867的瀏覽器,如微軟的Internet Explorer4.0以上版本,Netscape3.0以上版本,或者帶附件的Internet Explorer3.0?;跒g覽器的文件上傳是通過帶有屬性ENCTYPE="multipart/form-data"的HTML form實現的。這個form也必須包含一個或多個<INPUT TYPE=FILE>項,以讓用戶指定要上傳的本地文件。


帶有ENCTYPE="multipart/form-data"屬性的form所發送的數據必須被一個服務器端過程解析,以展開上傳的文件和其他非文件項。在asp環境中,這種任務用編譯好的active server組件能最好的完成,比如Persits軟件公司的AspUpload
(http://www.persits.com)。

本文所有示例都是建立在你的系統中安裝了AspUpload的基礎上的??梢栽谶@里下AspUpload
免費評估版http://www.persits.com/aspupload.html。解壓文件后,將AspUpload.dll
放在任意目錄中,在MS DOS窗口中執行命令

regsvr32 c:/dir/AspUpload.dll
開始
我們來創建一個簡單的能上傳3個文件的HTML form,和控制上傳的腳本。
這里是第一個HTML文件
Test1.htm:
<HTML>
<BODY BGCOLOR="#FFFFFF">

<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript1.asp">
<INPUT TYPE=FILE SIZE=60 NAME="FILE1"><BR>
<INPUT TYPE=FILE SIZE=60 NAME="FILE2"><BR>
<INPUT TYPE=FILE SIZE=60 NAME="FILE3"><BR>
<INPUT TYPE=SUBMIT VALUE="Upload!">
</FORM>
</BODY>
</HTML>
每個 <INPUT TYPE=FILE> 項在瀏覽器中顯示成為一個帶有"Browse..."按鈕的文本輸入框。如果你沒看見Browse按鈕,很有可能說明你的瀏覽器不支持文件上傳。

這里是相應的上傳腳本 UploadScript1.asp:
  <HTML>  
<BODY>  
<%  
Set Upload = Server.CreateObject("Persits.Upload.1")  
Count = Upload.Save("c:/upload")
%>
<% = Count %> files uploaded.  
</BODY>  
</HTML>




ASP腳本的第一行僅僅創建了一個AspUpload對象的實例。第二行調用組件的Save方法,它實際上的作用是:它解析從瀏覽器發送的東西,計算出有多少個文件正在上傳,并且把他們存在服務器上指定的目錄。目錄名可能以反斜線結束,也可能不是。所有文件將以他們原來的名字存放在目錄中。我們很快將看到如何更改任意或者所有文件的名字。

Save方法返回成功上傳的文件數量。萬一發生錯誤,這個方法將拋棄之。

注意你能夠使用我們的form中任意或者全部三個輸入框。AspUpload有足夠的智慧判斷出哪些輸入框使用了,哪些沒有。
  

使用FILES和FORMS集合訪問單個form項
我們看看第二組示例:

Test2.htm
<HTML>
<BODY BGCOLOR="#FFFFFF">

<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript2.asp">
File 1:<INPUT TYPE=FILE NAME="FILE1">
Description 1:<INPUT TYPE=TEXT NAME="DESCR1"><BR>
File 2:<INPUT TYPE=FILE NAME="FILE2">
Description 2:<INPUT TYPE=TEXT NAME="DESCR2"><BR>

<INPUT TYPE=SUBMIT VALUE="Upload!">

</FORM>
</BODY>
</HTML>
  
UploadScript2.asp <HTML>  
<BODY>  
<%  
Set Upload = Server.CreateObject("Persits.Upload.1")  
Upload.Save "c:/upload"
%>  
Files:<BR>  
<%  
For Each File in Upload.Files  
Response.Write File.Name & "=" & File.Path & " (" & File.Size & ")<BR>"
Next
%>  
<P>  
Other items:<BR>  
<%  
For Each Item in Upload.Form  
Response.Write Item.Name & "=" & Item.Value & "<BR>"
Next
%>  
</BODY>  
</HTML>



注意我們的HTML form現在有兩種輸入框,TYPE=FILE 和 TYPE=TEXT。因為我們form的ENCTYPE屬性,我們不再能通過標準的ASP Response.Form 集合來訪問form變量。此處Upload.Form 來解決了問題。這個集合實際上和Response.Form一樣,也就是,我們能通過整形或字串型索引訪問它的元素。例如:

Set Item1 = Upload.Form("DESCR1")

或者

Set Item1 = Upload.Form(1).

我們也能夠使用上面示例代碼顯示的For-Each語句遍歷集合中的項。Form集合包含FormItem類型的對象,它只有兩個字串屬性,Name 和 Value (缺省屬性).

記住Upload.Form集合僅僅包含非文件項,也就是不同于<INPUT TYPE=FILE>,這點很重要。AspUpload提供另外一個集合,叫做Files,來包含UploadedFile類型的對象,這種對象代表已經上傳的來自<INPUT TYPE=FILE>項的文件。很象Form集合,Files集合的項能夠通過使用字串或者整形索引,或者一個For-Each語句訪問,象上面的示例顯示的一樣。

運行示例2以后,我們將看到象這樣的一些東西:

Files:
FILE1=c:/upload/File1.xls (108544)
FILE2=c:/upload/File2.zip (211687)

Other items:
DESCR1=bla bla
DESCR2=test test

注意我們已經通過UploadedFile對象相應的Path和Size屬性獲得了上傳過的文件的目標路徑和文件大小。

如果我們的form只包含一個文件輸入框,<INPUT TYPE=FILE NAME="ONLYFILE">,那么沒有必要使用For-Each語句。我們只需要這么說

Response.Write Upload.Files("ONLYFILE").Path

或者,更常用的

Response.Write Upload.Files(1).Path


要點:Files和Form集合在調用Save方法前都不會裝入,因此在調用Upload.Save前就查詢這些集合是不正確的。

' 錯誤!
Upload.Save( Upload.Form("Path") )
限制文件大小
也許你需要限制上傳文件的大小,以防止服務器磁盤空間擁塞。你所需要做的一切就是在調用Save之前在你的Upload對象中調用SetMaxSize:
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.SetMaxSize 50000, False
Upload.Save "c:/upload"

在這個例子中,我們將上傳文件的大小限制在50000字節內。第二個可選參數指定超出文件最大范圍的部分是否應該被刪除(如果設成false或者不設),或者作為錯誤例外拒絕接收(如果設成True) 。

  

強制特有文件名
缺省的,AspUpload將覆蓋上傳路徑中已有的文件。如果你不想這樣,可以配置組件,為上傳文件產生特有的名字來防止覆蓋已有文件。方法是,在調用Save前設置上傳管理器的OverwriteFiles屬性:

Upload.OverwriteFiles = False

缺省值是true。

為防止名字沖突,AspUpload將在原來文件名后面加上用圓括號括起來的整數。例如,如果文件MyFile.txt已經存在于上傳目錄了,并且另外一個同名文件正在上傳,AspUpload會將新文件存為 MyFile(1).txt。如果我們上傳更多的MyFile.txt,他們將被存MyFile(2).txt, MyFile(3).txt,等等。
  

移動、拷貝、刪除文件
文件上傳對象提供了一些方法供你移動、拷貝或者刪除上傳的文件。這些方法是
file.Move( NewName As String )
file.Copy( NewLocation As String, Optional Overwrite)
file.Delete

根據NewName參數,Move方法將文件移動到其他目錄或者給他更名。假設文件abc.txt上傳到了目錄
c:/Upload。那么調用

file.Move "c:/WINNT/abc.txt" 將把文件移動到 c:/WINNT, 而調用
file.Move "c:/Upload/xyz.txt" 只會更改文件名。

要知道Move方法有個副作用是很重要的:當這個方法成功調用后,這個文件對象的Path屬性將指向新目錄/名字。

Copy屬性把文件拷貝到新目錄/名字。新目錄必須是完全合法的路徑。 Overwrite參數如果設成True或者不設,就會指示Copy方法覆蓋新目錄里的已有文件。 如果設成False,當文件在新目錄中已經存在地時候,會導致方法失敗。與Move方法不同,這個方法不會影響Path屬性。

有時你可能選擇使用Delete方法,例如你在把文件作為BLOBs存入數據庫中,并且不再需要它放在你的上傳路徑里時。將文件存入數據庫是我們下一個要討論的主題。

  

把文件作為BLOBs存入數據庫
許多數據庫管理系統象Ms access或者SQL Server將允許你將任意文件存為"binary large objects"(BLOBs)。一個MS Access表格能夠在OLE Object型的數據字段中存放二進制文件。在SQL Server中,相應的數據類型是IMAGE。存放的文件以后能夠重新取出供下載,或者用ADO顯示。
AspUpload讓你只使用短短一行代碼就能把上傳文件存入數據庫!讓我們看看第三組示例文件。文件 Test3.htm幾乎和Test1.htm相同,因此我們不再把它顯示在這里。文件UploadScript4.asp 很值得我們注意:
  
  <HTML>  
<BODY>  
<%  
Set Upload = Server.CreateObject("Persits.Upload.1")  
Upload.Save "c:/upload"  
On Error Resume Next  
For Each File in Upload.Files  

File.ToDatabase "DSN=data;UID=sa;PWD=xxx;", "insert into Blobs(id, Path, BigBlob) values(12, '" & File.Path & "', ?)"
if Err <> 0 Then  
Response.Write "Error saving the file: " & Err.Description
Else  
File.Delete  
Response.Write "Success!"
End If

Next
%>  
</BODY>  
</HTML>



這一行

On Error Resume Next

指示asp當以外發生時,不要顯示錯誤信息,只將意外代碼和描述存放到內建的Err對象,并且繼續腳本的執行。

下一行

File.ToDatabase "DSN=data;UID=sa;PWD=xxx;", "insert into Blobs(id, Path, BigBlob) values(12, '" & File.Path & "', ?)"

是將文件存放入數據庫所采用的一切。我們來檢查一下這個方法的兩個參數:

第一個參數是下列格式的ODBC連接字串:

"DSN=datasource;UID=userid;PWD=passWord;<other optional parameters>"

第二個參數是SQL INSERT或者UPDATE語句,帶有一個問號(?),并且只能帶一個。它的作用是為要存儲的文件提供空間容器。在這個例子中,我們下部的數據庫表Blobs包含三欄:一個Integer ID,一個VARCHAR Path,和一個IMAGE BigBlob。這個SQL INSERT語句將12放入ID欄,文件路徑放入Path欄,真實文件放入BigBlob欄。

下一行檢查語句在成功執行前是否正確。如果成功,Err對象取值0并且刪除文件
(File.Delete行),因為文件已經存入數據庫,不需要再放在上傳路徑中了。否則,Err包含一個數字錯誤代碼,并且Err.Description包含對于意外的語言描述。


將GIF和JPEG圖象存入數據庫很常見。將圖象從數據庫中取出并顯示在HTML頁中,你不需要使用任何第三方組件。ADO就能完成任務。

在你的HTML頁面中放入普通<IMG>標簽,將SRC屬性指向一個ASP腳本,例如

<IMG SRC="GetImage.asp?id=4">

GetImage.asp 腳本看起來可能會是這樣

<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "data"
Set rs =db.Execute("SELECT BigBlob FROM Blobs where id = " & Request("id") )
Response.ContentType = "image/jpeg" '(or "image/gif")
Response.BinaryWrite rs("BigBlob")
%>


--------------------------------------------------------------------------------
哪里能得到更多關于AspUpload的信息
要得到完整的AspUpload文檔,并下載免費評估版本,請訪問Persists軟件公司的web站點
http://www.persits.com/aspupload.html。這個組件的注冊費用是$99.00(單CPU協議)。
常問到的問題
問:  AspUpload能在所有ASP版本上工作嗎?
答:  不.早期版本ASP的Request對象不提供BinaryRead或者TotalBytes方法,而本組件對這兩個方法依賴很大。檢驗你的ASP版本是否允許上傳的最好方法是執行象<% n = Request.TotalBytes %>這樣一句簡單的腳本,看你的ASP模塊能否識別。

問:  哪里能獲得最新版本的ASP?
答:這取決于你的web服務器的版本。如果你使用PWS或者IIS3.0,你可以到
http://www.microsoft.com/office/intranet/modules/asp411s3.asp下載最新版本。如果你使用IIS4.0你可以從http://www.microsoft.com/iis下載并安裝Option Pack 4。

問: 微軟Internet Explorer 3.0支持文件上傳嗎?
答:  缺省的,是不支持。但是有一個IE3的附件可以用,從此下載 http://www.microsoft.com/msdownload/iebuild/ie3add_win32/en/ie3add_win32.htm.
  

關于作者
Peter Persits (peter@persits.com)是Persits Software, Inc的創建者和總裁,流行ASP組件 AspNTUser, AspGrid, AspAccessControl, AspUpload 和 AspEmail的作者。Peter已經從事軟件開發10多年。他擁有American University (Washington, DC)的計算機科學碩士學位,并且是微軟認證解決方案開發員。他現住在Arlington, VA。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍偷拍色图| 国产97在线|亚洲| 亚洲天堂av在线免费| 日韩精品视频免费| 亚洲色图第一页| 人妖精品videosex性欧美| 亚洲自拍欧美色图| 中文字幕日韩欧美在线| 这里只有精品视频在线| 国产精品久久久久免费a∨大胸| 最近2019中文免费高清视频观看www99| 欧美专区日韩视频| 亚洲欧美一区二区三区情侣bbw| 日韩a**站在线观看| 456亚洲影院| 日韩av成人在线观看| 亚洲欧洲日产国产网站| 日韩经典一区二区三区| 91地址最新发布| 日韩在线中文字| 久久久精品一区二区| 日韩电影免费观看中文字幕| 欧美日韩在线第一页| 成人免费黄色网| 日韩av观看网址| 精品香蕉在线观看视频一| 亚洲有声小说3d| 欧美中文字幕第一页| 992tv成人免费视频| 亚洲成人黄色在线观看| 国产成人亚洲综合| 亚洲欧美日韩成人| 精品色蜜蜜精品视频在线观看| 精品久久久久久中文字幕大豆网| 九九精品视频在线| 91免费看国产| 亚洲成色999久久网站| 亚洲成人久久一区| 亚洲区中文字幕| 日韩av第一页| 日韩av电影在线播放| 国产成人涩涩涩视频在线观看| 精品国偷自产在线视频| 久久99国产精品久久久久久久久| 中国日韩欧美久久久久久久久| 欧美激情欧美激情在线五月| 欧美一区二区三区艳史| 亚洲人成毛片在线播放| 国产亚洲精品久久久久久牛牛| 国产精品视频自拍| 久久精品国产久精国产一老狼| 久久人91精品久久久久久不卡| 欧美大片欧美激情性色a∨久久| 成人午夜在线影院| 国内精品久久久久久中文字幕| 亚洲国产高清高潮精品美女| 国语自产在线不卡| 国产一区二区三区在线免费观看| 97婷婷大伊香蕉精品视频| 欧美黑人一级爽快片淫片高清| 成人免费视频在线观看超级碰| 欧洲日本亚洲国产区| xxxx欧美18另类的高清| 日本最新高清不卡中文字幕| 中文字幕9999| 亚洲国产精品字幕| 亚洲品质视频自拍网| 亚洲护士老师的毛茸茸最新章节| 国产精品中文字幕在线观看| 在线观看欧美www| 欧美视频中文字幕在线| 久久久久国产精品免费| 亚洲欧洲日韩国产| 日韩精品视频在线| 欧美最猛性xxxxx亚洲精品| 夜夜狂射影院欧美极品| 日韩精品免费一线在线观看| 国产日韩中文字幕在线| 97精品久久久| 国产精品久久9| 97视频免费在线观看| 久久国内精品一国内精品| 色悠久久久久综合先锋影音下载| 亚洲欧美在线看| 在线播放国产一区二区三区| 日韩高清有码在线| 国产精品揄拍一区二区| 久久久久日韩精品久久久男男| 亚洲综合在线播放| 日韩电影视频免费| 日韩av免费网站| 欧美天天综合色影久久精品| 久99久在线视频| 人妖精品videosex性欧美| 亚洲韩国欧洲国产日产av| 亚洲免费电影一区| 8x海外华人永久免费日韩内陆视频| 久热精品视频在线观看一区| 亚洲精品免费在线视频| 欧美成人免费大片| 国产v综合ⅴ日韩v欧美大片| 久久福利视频网| 57pao精品| 午夜精品久久久久久久99热| 亚洲2020天天堂在线观看| 国内外成人免费激情在线视频网站| 欧美午夜片在线免费观看| 精品国产一区久久久| 久久色免费在线视频| 日韩成人在线视频网站| 一道本无吗dⅴd在线播放一区| 亚洲欧洲自拍偷拍| 久久久久久久久久久av| 91在线中文字幕| 国产视频精品va久久久久久| 国产精品视频999| 国产91久久婷婷一区二区| 欧美猛男性生活免费| 国产999精品视频| 98午夜经典影视| 亚洲精品视频久久| 国产亚洲欧洲黄色| 中文字幕精品在线视频| 亚洲精品xxx| 人人爽久久涩噜噜噜网站| 欧美综合国产精品久久丁香| 欧美视频国产精品| 国产精品免费一区二区三区都可以| 日韩av黄色在线观看| www.精品av.com| 色偷偷9999www| 亚洲精品自产拍| 久久视频精品在线| 欧美视频中文在线看| 九九久久久久久久久激情| 国产午夜精品一区理论片飘花| 国产欧美va欧美va香蕉在| 在线视频日韩精品| 久久精品国产69国产精品亚洲| 国产欧美日韩高清| 亚洲一区二区三区成人在线视频精品| 亚洲视频综合网| 亚洲电影在线观看| 欧美俄罗斯性视频| 亚洲天堂成人在线视频| 国产精品6699| 国产91在线播放九色快色| 欧美激情在线播放| www.国产一区| 国产精品三级美女白浆呻吟| 在线观看精品自拍私拍| 在线观看亚洲区| 不卡伊人av在线播放| 亚洲乱码国产乱码精品精天堂| 精品久久久久久久中文字幕| 91成人福利在线| 综合激情国产一区| 日韩精品视频观看| 国产欧美日韩视频| 亚洲激情电影中文字幕| 亚洲成人激情在线观看| 国产日产欧美a一级在线| 中文字幕不卡在线视频极品| 欧美性感美女h网站在线观看免费|