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

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

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

2019-11-18 19:38:18
字體:
來源:轉載
供稿:網友

  摘要:在基于瀏覽器/服務器的應用環境中,在瀏覽器中上傳各種類型的文件一直是困擾用戶文件管理應用的難題之一。在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="form

  而是使用:

<FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="mult

  這種編碼方案在傳送大量數據的時候,比起缺省的"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組件存在。

  二.基于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
97超级碰碰碰久久久| 亚洲第一区中文字幕| 91精品国产91久久久久| 欧美精品在线第一页| 亚洲电影免费观看高清完整版在线观看| 久色乳综合思思在线视频| 久久久免费电影| 精品国产精品三级精品av网址| 亚洲精品一区二区三区不| 日韩av电影在线播放| 777国产偷窥盗摄精品视频| 国产美女搞久久| 久久99精品久久久久久青青91| 91精品国产综合久久香蕉| 日韩av成人在线| 精品视频一区在线视频| 日韩精品中文字幕在线播放| 伊人久久久久久久久久久久久| 国产精品毛片a∨一区二区三区|国| 91九色蝌蚪国产| 久久国产一区二区三区| 亚洲精品99999| 国产香蕉精品视频一区二区三区| 国产精品视频网站| 91高清免费视频| 国产午夜精品免费一区二区三区| 欧美午夜片欧美片在线观看| 欧美性猛交xxx| 亚洲精品国产精品乱码不99按摩| 亚洲人成电影在线| 精品久久久免费| 日韩的一区二区| 欧美亚洲另类在线| 精品香蕉一区二区三区| 精品国产乱码久久久久酒店| 91精品国产自产91精品| 国产精品一区电影| 国产精国产精品| 日韩电影中文字幕一区| 欧美精品久久久久久久免费观看| 国产99久久久欧美黑人| 国产精品视频1区| 777国产偷窥盗摄精品视频| 欧美性xxxx极品hd满灌| 91精品国产91| 久久久噜噜噜久久久| 亚洲一区美女视频在线观看免费| 日韩在线视频播放| 最近2019好看的中文字幕免费| 欧美肥婆姓交大片| 日韩欧美a级成人黄色| 午夜免费在线观看精品视频| 久久色精品视频| 91在线无精精品一区二区| 91久久精品国产91性色| 精品国模在线视频| 久久精品视频播放| 欧美另类高清videos| 中文字幕日韩有码| 中文字幕一区二区三区电影| 亚洲乱码一区二区| 91国产美女视频| 久久久久久香蕉网| 亚洲专区中文字幕| 亚洲一品av免费观看| 欧美一区二区大胆人体摄影专业网站| 按摩亚洲人久久| 午夜精品久久久久久99热| 欧美日韩第一视频| 日韩欧美在线国产| 青青草原一区二区| 国产精品va在线播放| 欧美激情视频网| 欧美大肥婆大肥bbbbb| 黑人巨大精品欧美一区二区三区| 久久中文字幕在线| 色综合伊人色综合网| 亚洲精品自拍偷拍| 国产免费一区视频观看免费| 成人欧美一区二区三区在线湿哒哒| 精品一区电影国产| 欧美激情亚洲综合一区| 久久成人亚洲精品| 欧美三级免费观看| 97精品免费视频| 69av在线播放| 中文字幕亚洲一区| 日韩有码在线电影| 久久久亚洲欧洲日产国码aⅴ| 欧美日韩第一视频| 久久久久久久国产| 性色av一区二区三区免费| 91精品国产99| 91久久久在线| 日本视频久久久| 色系列之999| 国产欧美va欧美va香蕉在| 欧美在线视频一区| 成人精品视频在线| 国产欧美欧洲在线观看| 欧美日韩综合视频| 国产精品久久久久久久久久久不卡| 亚洲精品久久视频| 福利一区福利二区微拍刺激| xxxx性欧美| 欧美性高潮床叫视频| 国产婷婷97碰碰久久人人蜜臀| 亚洲人成电影网站色xx| 97在线精品国自产拍中文| 色综合久久中文字幕综合网小说| 欧美做爰性生交视频| 国产97色在线|日韩| 欧美激情国产精品| 中文字幕日韩av| 日韩欧美在线视频免费观看| 中文字幕在线成人| 亚洲男人第一网站| 精品免费在线视频| 欧美丰满少妇xxxxx做受| 成人有码视频在线播放| 黑人欧美xxxx| 国产亚洲欧美日韩精品| 日韩精品在线免费观看视频| 欧美性在线视频| 青青草一区二区| 久久久国产精彩视频美女艺术照福利| 欧美成人h版在线观看| 91精品中文在线| 2019中文在线观看| 深夜福利国产精品| 国产一区二区在线免费| 精品国产欧美一区二区三区成人| 成人亚洲激情网| 亚洲精品乱码久久久久久按摩观| 国产午夜精品理论片a级探花| 美女av一区二区三区| 日韩精品视频免费| 亚洲级视频在线观看免费1级| 亚洲第一区中文字幕| 欧美亚洲日本网站| 亚洲色图综合久久| 久久亚洲精品一区二区| 日韩精品在线免费观看视频| 欧美性猛交xxxxx免费看| 亚洲大胆美女视频| 日韩国产精品一区| 久久夜色精品国产| 久久综合国产精品台湾中文娱乐网| 国产香蕉精品视频一区二区三区| 中文字幕av一区| 日韩国产精品亚洲а∨天堂免| 欧美黄色小视频| 国产精品青青在线观看爽香蕉| 国产精品流白浆视频| 成人激情免费在线| 亚洲a区在线视频| 国产欧美在线看| 亚洲精品小视频| 亚洲天堂日韩电影| 一区二区三区高清国产| 国产精品网站视频| 精品久久久久久久久久久久久久| 日韩美女福利视频| 国产日产亚洲精品|