国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

用VB6做一個簡單的文件上傳組件(一)

2019-11-18 22:12:24
字體:
來源:轉載
供稿:網友
最近在單位做的一個項目里需要有文件上傳的功能,正好手頭一本書的附贈光盤里有一個上傳組件,心中大喜??上щS之便發現這是一個試用版,不給錢就只能用50次,太小氣了!!好在頭頭催得不緊,時間充裕,干脆自己試著做一個,既可長經驗值,又能長成就感,不試白不試!以下介紹的便是俺折騰了兩天半搗鼓出來的一個只能說是雛形的玩意,區區三十行代碼,大俠們不要笑俺哦,這只是寫給與俺一樣好奇心強但經驗值低的弟兄們看的。
    文件上載所需的第一步當然是進入一個有“file”表單元素的頁面,具體就不說了,大家都知道。但是若想做一個能夠接受該文件并且將其保存到服務器硬盤上的組件,必須知道所提交的原始數據的怎么一個模樣才行。做到這一點并不難:
    <%
      Dim FormData,FormSize
      FormSize=Request.TotalBytes
      FormData=Request.BinaryRead(FormSize)
      Response.BinaryWrite FormData
    %>
    因為需要讀取的是前一個頁面提交來的原始字節數據,因此不能使用Request.Form()方法,必須使用BinaryRead方法,并且一旦使用了這個方法,就不能再在同一個頁面中使用Form()方法了,反之亦然?;谕瑯拥牡览?,向頁面輸出時也必須使用BinaryWrite方法,不過這并不妨礙你繼續使用Response.Write方法。
    在下面的描述中假設瀏覽者選擇上傳的文件是一個GIF圖片,你會發現這段代碼運行的結果并不是在瀏覽器上顯示出這幅圖片,而只是輸出了一堆基本上是亂七八糟的字符:

-----------------------------7ce20d227c0232
Content-Disposition: form-data; name="file"; filename="C:/mypic.gif"
Content-Type: image/gif

GIF89a    垐??!?倇挌7昳€聉}$撾頓藶排湃缺哪澆爬⒖咯技Φ檔北發創熍皗獂勃姰畾棩ゥ撾頓藶排湃缺哪澆爬⒖咯技Φ檔北發創熍皗獂勃姰畾棩ゥゥ挗|櫃櫇潒櫃嚈櫃殦x敂儘崓潅倢寍檱Z杹r?杽Z剟剠厁儍t??p{{{zzszzlsss媙arrj僯jrre€ccfff乨Xfffddjj^fffddZ__UZZZYYSWWMRRRRRJ_BBKKK?IIB? ??W::AAA?S;?-----------------------------7ce20d227c0232--

    不奇怪,這就對了!因為原始數據并不僅僅是圖片文件本身的數據,它還包含有對該文件在用戶硬盤上的路徑、類型、提交頁面的表單域名等相關信息的描述,以及頭尾兩段基本相同的標識(即“-----------------------------7ce20d227c0232”),我想這對標識應該是在表單中含有多個元素時起分割作用的。中間的那段數據,即以“GIF89a”開頭,直到最后一個“;”,才是我們所想得到的GIF圖片文件的數據。若想讓瀏覽器能夠顯示出這幅圖片,當然得先把這些不需要的內容去掉再向頁面輸出。因此下面該做些什么就很明了了。
    第一步,掐頭:
    “頭”與圖片數據的分界線就是兩對回車換行符(在瀏覽器中是看不到“GIF89a”之前的那個空白行的,得把輸出結果粘貼到寫字板里去研究,記事本也不行)。
    Dim DataStart,CLStr
    CLStr=ChrB(13) & ChrB(10)
    DataStart=InStrB(FormData,CLStr & CLStr)+4
    其中的4是兩對回車換行符的長度,另外要注意這里都是在針對字節數據進行操作,而不是字符,因此不要用錯了函數,少敲了個“B”就完全得不到正確結果了。
    第二步,去尾:
    “頭”有多大算是搞清了,那尾呢?不急,先獲取開頭那段標識的具體內容,注意它的結尾處是一對回車換行符:
    Dim DivStr
    DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
    因為我們將要使用MidB方法截取圖片數據,所以接下來需要搞清楚整段圖片數據的字節數,就用前面已定義了的DataSize變量:
    DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
    為什么要減2呢?因為末尾那段標識之前也有一對回車換行符。至此,圖片數據便可以很輕易地得到并在瀏覽器上輸出了:
    FormData=MidB(FormData,DataStart,DataSize)
    Response.BinaryWrite FormData
    不過我想你一定不會滿足于到此為止的,因為還沒有存盤呢!當然我也不會做到這里便收工,否則是沒法向頭頭交差的。前面所探討的這些內容都還只局限在純粹的asp腳本程序范圍內,并沒有涉及到組件技術。其實我一開始并沒有想向這方面努力,只想靠ASP解決問題,可惜FileSystemObject沒告訴我它可以往硬盤上寫二進制文件,在這個論壇上問了半天也沒人睬我,只好自己動手編組件了。
    不過接下來的過程并不像想象中的那樣艱難。
    所要做的這個組件的功能很簡單,只提供了一個方法:SaveFile(Pathname),在這個方法內,程序首先獲取上傳頁面所提交的文件的字節數據,就象前文所述的腳本程序一樣,然后再將這些數據寫到服務器硬盤上由參數Pathname所指定的一個二進制文件內,一切便大功告成了,至于如何使這個組件進一步完善些,呵呵,以后慢慢來吧。
    具體怎么做呢?打開VB,然后請聽下回分解。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西乡县| 揭阳市| 来安县| 凭祥市| 军事| 五莲县| 永定县| 辽阳县| 广元市| 江达县| 南召县| 科技| 九龙县| 井冈山市| 伊宁市| 靖安县| 红安县| 云安县| 高州市| 临潭县| 汉沽区| 新巴尔虎左旗| 招远市| 临猗县| 宿州市| 涿州市| 南开区| 环江| 子洲县| 大竹县| 韶关市| 武乡县| 娱乐| 龙游县| 玉溪市| 尼勒克县| 石家庄市| 舒兰市| 彩票| 临潭县| 汨罗市|