透過表單的做為二進位檔案上傳request.totalbytes提取出上傳的二級資料的程式碼說明。
複製代碼代碼如下:
<input type="file">
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13) & chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf & bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
formsize=request.totalbytes
取得上傳的最大位元組數
-----------------------
formdata=request.binaryread(formsize)
取得二進位流的表單form數據
-----------------------
bncrlf=chrB(13) & chrB(10)
設定crlf 回車換行程式碼變數
------------------------------
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
取得第一個crlf左邊的位元組數據
instrb(formdata,bncrlf)-1機檢查出crlf二進位位元組的位元值減一,即為該標誌位資訊之前的二進位數據,需要說明的是instrb返回的是clng,所以此處加了一個clng是多餘的
------------------------------
datastart=instrb(formdata,bncrlf & bncrlf)+4
取得圖象數據,去除form表單新增的頭資訊的啟動位置,也就是你的type=file在form提交後的真正檔案資料的位元組起始位置
二個連續crlf的位置+4(即而個crlfg的長度)
-------------------------------
dataend=instrb(datastart+1,formdata,divider)-datastart
從上的取得的資料位置+1做為檢查資料結尾的參考計算值,在datastart+1開始的位置偵測回傳第一個二進位form分隔頭資訊的位置,再減去datastar的相對位置
----------------------------
mydata=midb(formdata,datastart,dataend)
midb()取以上多番周折所取得的上傳檔案資料的star end位制的數據
ok --------------> 現在乾淨的提取上傳的二級制數據
註:
(1).所有*B系列的VB函數都是以位元組byte來處理,處理二級制必須用他們
(2).type=file 和對應的form類型的表單資料提交後均對每個文件域附加有對應的頭信息
所以必須按上面的演算法來明確找到真正的文件數據
(3).同時頭資訊裡還包含上傳初始檔名的資料如c:/aaa/aaa.jpg,可以同樣處理formdata的資料而提取該段文件域資料的初試檔名
(4).這些演算法是來自http「form」規範提供的格式數據,所以任何一家的處理演算法都是大同小異的!