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

首頁 > 編程 > ASP > 正文

ASP中實現文件上傳方法的研究

2024-05-04 11:07:16
字體:
來源:轉載
供稿:網友

摘要:在基于瀏覽器/服務器的應用環境中,在瀏覽器中上傳各種類型的文件一直是困擾用戶文件管理應用的難題之一。在HTTP中上傳文件有三種機制:RFC1867,PUT和WebDAV。常用的實現方法是利用在RFC1867中引入的一個新類型:File以及ADO Stream對象。本文對上述上傳方法及實現原理作了論述,并給出了具體解決實例。

關鍵詞:ASP 組件 FILE對象

當前,基于瀏覽器/服務器模式的應用比較流行。當用戶需要將文件傳輸到服務器上時,常用方法之一是運行FTP服務器并將每個用戶的FTP默認目錄設為用戶的Web主目錄,這樣用戶就能運行FTP客戶程序并上傳文件到指定的 Web目錄。這就要求用戶必須懂得如何使用FTP客戶程序。因此,這種解決方案僅對熟悉FTP且富有經驗的用戶來說是可行的。 如果我們能把文件上傳功能與Web集成,使用戶僅用Web瀏覽器就能完成上傳任務,這對于他們來說將是非常方便的。但是,一直以來,由于File System Object的僅能傳送文本文件的局限,所以ASP最大的難題就是文件上傳問題。下面介紹的就是如何在基于HTTP協議的網頁中實現文件的上傳。

一.通過HTTP上傳的三種機制

通過HTTP上傳有三種機制:RFC1867, PUT 和 WebDAV。

PUT 是在HTTP 1.1引入了一個新的HTTP動詞。當web服務器收到一個HTTP PUT和對象名字,它將會驗證用戶,接收HTTP流的內容,并把它直接存入web服務器。由于這可能會對一個web站點造成破壞,并且還會失去HTTP最大的優勢:服務器可編程性。在PUT的情況下,服務器自己處理請求:沒有空間讓CGI或者ASP應用程序介入。唯一讓你的應用程序捕獲PUT的方法是在低層操作,ISAPI過濾層。由于相應的原因,PUT的應用很有限。

而WebDAV允許web內容的分布式認證與翻譯。它引入了幾種新的HTTP動詞,允許通過HTTP上傳,鎖定/解鎖,登記/檢驗web內容。Office 2000中的"Save to web" 就是通過WebDAV來實現的。如果你所感興趣的一切都是上傳內容,WebDAV應用得非常出色,它解決了很多問題。 然而,如果你需要在你的web應用程序里面上傳文件,WebDAV對你就毫無用處可言。象HTTP PUT一樣,那些WebDAV的動詞是被服務器解釋的,而不是web應用程序。你需要工作在ISAPI過濾層來訪問WebDAV的這些動詞,并在你的應用程序中解釋內容。

RFC1867 (http://www.ietf.org/rfc/rfc1867.txt) 最終被W3C在HTML3.2中接受前,是作為一種建議標準。它是一種非常簡單但是功能很強大的想法:在表單字段中定義一個新類型。

<INPUT TYPE="FILE">

并且在表單本身加入了不同的編碼方案,不再使用典型的:

<FORM ACTION="formproc.asp" METHOD="POST">

而是使用:

<FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="multipart/form-data">

這種編碼方案在傳送大量數據的時候,比起缺省的"application/x-url-encoded"表單編碼方案,顯得效率要高得多。URL編碼只有很有限的字符集,使用任何超出字符集的字符,必須用'%nn'代替,這里的nn表示相應的2個十六進制數字。例如,即使是普通的空格字符也要用'%20'代替。而RFC1867使用多部分MIME編碼,就象通常在e-mail消息中看到的那樣,不編碼來傳送大量數據,而只是在數據周圍加上很少的簡單但實用的頭部。主要瀏覽器的廠商都采用了建議的"瀏覽..."按鈕,用戶能很容易的使用本地"打開文件..." 對話框選擇要上傳的文件。

RFC1867仍然將大多數文件上傳的靈活方法留給了你的web應用程序。PUT用得很有限。WebDAV對內容的作者很有用,比如FrontPage用戶,但是對想在web應用程序中加入文件上傳的web開發者來說很少用到。因此,RFC1867是在web應用程序中加入文件上傳的最好的辦法。

在實際應用中,微軟免費提供了Posting Acceptor 。ASP不懂"multipart/form-data" 編碼方案。取而代之,微軟提供了Posting Acceptor ,Posting Acceptor是一種在上傳完成后,接受REPOST到一個ASP頁的ISAPI應用程序。

Software Artisans的SA-FileUp是最早的商業Active Server組件之一。幾經改進,現在作為一個純粹的ASP組件存在。

國內也有類似的組件被開發使用,如由http://www.aspcn.com ASP中華網開發的AspcnUP.dll組件;彥程工作室(www.greatengine.com)開發的GEUpload10.dll組件等。

二.基于ASP的文件上傳實現原理分析

基本原理是:采用ADO Stream對象的BinaryRead方法將FORM中的所有數據讀出,從中截取出所需的文件數據,以二進制文件方式存盤。

下面是上傳文件頁面的一個例子(upload.htm):

<html>
<body>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html>

程序中使用了文件對象,這樣在Upload.asp中采用BinaryRead方法讀來的原始數據就不僅僅是選擇的文件本身的數據,還包含該文件在用戶硬盤上的路徑、類型、提交頁面的表單域名等相關信息的描述,這樣我們就需從中提取出文件的具體內容。根據分析,數據的頭部信息與數據的分界線是兩對回車換行符,尾部也有分隔信息,我們可以采用類似以下的方法獲取文件數據。

Dim FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4是兩對回車換行符的長度
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData就是文件的內容了。

中間根據需要,可進行相應的處理。最后的工作就是將文件保存了。保存的方法可以有兩種:一種是利用VB或VC之類程序中的二進制文件操作方法,在工程中加入適當的類型庫,最終編譯成DLL文件,使用時再將該DLL文件注冊就可以了。文件存貯程序如下:

Public Function SaveFile(Pathname As String) As String
     Dim objContext As ObjectContext
     Dim objRequest As Request
  Set objContext=GetObjectContext()
     Set objRequest=objContext("Request")
     '以下的一段代碼是進行文件存貯的有關操作
  Dim FormData() As Byte,CLStr,DivStr
     Dim DataStart As Long,DataSize As Long
     DataSize=objRequest.TotalBytes
     Redim FormData(DataSize-1)
     FormData=objRequest.BinaryRead(DataSize)
     CLStr=ChrB(13) & ChrB(10)
     DataStart=InStrB(FormData,CLStr & CLStr)+4
     DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
     DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
     FormData=MidB(FormData,DataStart,DataSize)
     '創建一個二進制文件并將FormData寫入其中
     Open Pathname For Binary As 1
     Put #1,,FormData
     Close #1
     SaveFile="OK!"
   End Function

第二種方法是利用ADO STREAM中提供的二進制文件操作方法來完成,保存文件的語句是: StreamOBJ.SaveToFile (fileName,2)。在 這種操作中,我們可以將有關的操作存放在一個類文件中,在應用時,直接將該類文件包含在ASP程序中就可以了。具體處理方法,請參閱有關介紹。

三.文件上傳實現方法實例

實現文件上傳可使用組件或無組件方式。對于組件類,比如說microsoft posting acceptor(簡稱mpa),就是微軟公司發布的一個免費服務器組件,這類組件的安裝也比較方便。對于微軟的mpa,運行它的安裝文件就可以了。而一般的dll組件形式的,我們則需要進行注冊。例如,要使用aspcnUP.dll,只要在Window 2000上執行regsvr32 [path/]aspcnUP.dll,系統出現注冊成功的信息提示就可以使用該組件了;對于無組件類,如www.5xsoft.com的無組件上傳類-upload_5xsoft。在使用時,只要在處理程序中包含以下的語句就可以了:

<!--#include FILE="upload.inc"-->
set upload=new upload_5xSoft '建立上傳對象

有關的屬性與操作方法,請參閱該組件的使用手冊。

下面是以aspcnUP.dll組件為例,上傳部分類型文件的源代碼(upload.asp):

<% @ language="vbscript"
  Set fileUP=Server.CreateObject("aspcn.Upload")
  fileUP.Maxsize=200000
  fileUP.Path="d:/upfile"
  fileUP.Upload
  For i=0 to fileUP.Count
   fieldname=fileUP.FieldName(i)
   If fileUP.FileType(fieldname)="zip" Or ileUP.FileType(fieldname)="rar" Then
    fileUP.Save fieldname
   End If
  Next
  Set fileUP=Nothing
%>

四.結束語

瀏覽器/服務器應用模式還在快速地發展著,在微軟新推出的ASP.NET中,已經內置了文件上傳的功能,使用非常簡單方便。作為一種全新的技術,ASP.NET并不只是ASP的簡單升級,它是一個用于Web開發的全新框架,其中包含了許多新的特性。ASP.NET提供了更易于編寫、結構更清晰的代碼,利用這些代碼我們將會更容易地進行再利用和共享,從而開發出更多更實用的程序來。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
这里精品视频免费| 国产精品视频导航| 美日韩精品免费视频| 欧美精品久久久久久久久久| 成人精品网站在线观看| 亚洲精品电影网站| 九九热最新视频//这里只有精品| 国产精品视频一区二区三区四| 日韩精品视频在线观看网址| 亚洲国产精品电影| 国产精品手机播放| 欧美亚洲视频在线观看| 欧美国产在线电影| 久久久久久久久久久网站| 欧美精品国产精品日韩精品| 成人情趣片在线观看免费| 成人av在线天堂| 日韩中文字幕在线免费观看| 久久中国妇女中文字幕| 国产精品丝袜久久久久久不卡| 亚洲视频在线观看视频| 在线亚洲国产精品网| 欧美亚洲视频在线看网址| 国产ts一区二区| 狠狠综合久久av一区二区小说| 尤物九九久久国产精品的特点| 国产日产欧美a一级在线| 成人国产精品日本在线| 中文字幕日本欧美| 在线观看国产成人av片| 在线看日韩av| 欧美日本高清视频| 欧美一级黄色网| 精品久久久久久国产91| 日本人成精品视频在线| 精品视频—区二区三区免费| 性欧美在线看片a免费观看| 精品无人区太爽高潮在线播放| 亚洲最新av网址| 97精品视频在线播放| 久久久成人av| 色播久久人人爽人人爽人人片视av| 日韩三级成人av网| 91久久精品国产91性色| 国语自产精品视频在线看抢先版图片| 国产精品成人观看视频国产奇米| 国产成人久久久| 欧美肥老太性生活视频| 高清亚洲成在人网站天堂| 热re99久久精品国产66热| 亚洲人成在线免费观看| 欧美日韩亚洲一区二| 日韩a**中文字幕| 亚洲福利视频专区| 国产精品影院在线观看| 久久久久久久久久久av| 国产一区二区三区四区福利| 日本精品久久久| 国产精品久久久久久久久久小说| 亚洲а∨天堂久久精品喷水| 国产成人97精品免费看片| 91精品视频网站| 精品国产31久久久久久| 日韩网站免费观看高清| 日韩在线精品一区| 大伊人狠狠躁夜夜躁av一区| 久久精品99国产精品酒店日本| 欧美xxxx做受欧美| 中文字幕av一区二区三区谷原希美| 亚洲国产成人在线视频| 5566日本婷婷色中文字幕97| 色偷偷av一区二区三区乱| 亚洲色图在线观看| 成人黄色免费网站在线观看| 欧美最近摘花xxxx摘花| 97在线观看免费高清| 性欧美长视频免费观看不卡| 一区三区二区视频| 久久久久女教师免费一区| 中文字幕国产精品| 国产成人av在线播放| 欧美激情性做爰免费视频| 国产主播精品在线| 国产欧美日韩免费看aⅴ视频| 成人在线激情视频| 最近2019中文字幕大全第二页| 欧美成人亚洲成人| 亚洲一二在线观看| 精品国产区一区二区三区在线观看| 久久久久久成人| 国产精品偷伦免费视频观看的| 91亚洲精品久久久久久久久久久久| 日本精品久久久久久久| 91在线视频九色| 欧美性猛交xxxx久久久| 日韩69视频在线观看| 91在线高清免费观看| 日韩欧美一区二区在线| 97视频在线观看免费高清完整版在线观看| 亚洲欧美资源在线| 久久久久五月天| 久久久精品一区二区| 日韩av电影手机在线| 亚洲欧美制服中文字幕| 91欧美精品午夜性色福利在线| 久久精品国产69国产精品亚洲| 曰本色欧美视频在线| 亚洲国产精品国自产拍av秋霞| 久久五月天综合| 久久夜色精品亚洲噜噜国产mv| 日本精品视频在线观看| 久久精品国产成人精品| 成人午夜一级二级三级| 国产精品成人免费电影| 欧美日韩国产中文精品字幕自在自线| 情事1991在线| 欧美一区二区三区……| 国产精品免费一区| 高清一区二区三区四区五区| 欧美一级在线亚洲天堂| 亚洲欧洲xxxx| 久久久国产成人精品| 国产91精品高潮白浆喷水| 狠狠爱在线视频一区| 久久99精品久久久久久琪琪| 欧洲亚洲在线视频| 亚洲国产精品va在线看黑人动漫| 亚洲夜晚福利在线观看| 日本中文字幕不卡免费| 性夜试看影院91社区| 久久在线精品视频| 欧美大成色www永久网站婷| 亚洲国产成人精品女人久久久| 日韩精品视频中文在线观看| 亚洲自拍高清视频网站| 欧美理论电影在线观看| 国产精品视频网站| 91色在线视频| 欧美一级视频免费在线观看| 欧美一级在线播放| 日韩av在线免播放器| 亚洲国产成人久久| www.99久久热国产日韩欧美.com| 欧美在线一区二区三区四| 亚洲欧美国产视频| 亚洲欧美日韩精品| 亚洲人成77777在线观看网| 亚洲精品福利资源站| 日日骚av一区| 美日韩在线视频| 久久久人成影片一区二区三区观看| 日韩欧美在线视频日韩欧美在线视频| 国产日韩欧美综合| 69精品小视频| 欧美噜噜久久久xxx| 色一情一乱一区二区| 成人免费视频在线观看超级碰| 国产精品久久久一区| 久久久国产精品免费| 精品爽片免费看久久| 久久香蕉国产线看观看网| 啪一啪鲁一鲁2019在线视频| 亚洲综合社区网| 日韩欧美中文字幕在线播放|