技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 28440
|
基本原理是:采用ADO Stream對(duì)象的BinaryRead方法將FORM中的所有數(shù)據(jù)讀出,從中截取出所需的文件數(shù)據(jù),以二進(jìn)制文件方式存盤。 下面是上傳文件頁面的一個(gè)例子(upload.htm):<html>
<body>
<form name="Upload" Method="ost" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html> 程序中使用了文件對(duì)象,這樣在Upload.asp中采用BinaryRead方法讀來的原始數(shù)據(jù)就不僅僅是選擇的文件本身的數(shù)據(jù),還包含該文件在用戶硬盤上的路徑、類型、提交頁面的表單域名等相關(guān)信息的描述,這樣我們就需從中提取出文件的具體內(nèi)容。根據(jù)分析,數(shù)據(jù)的頭部信息與數(shù)據(jù)的分界線是兩對(duì)回車換行符,尾部也有分隔信息,我們可以采用類似以下的方法獲取文件數(shù)據(jù)。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是兩對(duì)回車換行符的長度
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData就是文件的內(nèi)容了。 中間根據(jù)需要,可進(jìn)行相應(yīng)的處理。最后的工作就是將文件保存了。保存的方法可以有兩種:一種是利用VB或VC之類程序中的二進(jìn)制文件操作方法,在工程中加入適當(dāng)?shù)念愋蛶欤罱K編譯成DLL文件,使用時(shí)再將該DLL文件注冊(cè)就可以了。文件存貯程序如下:Public Function SaveFile(Pathname As String) As String
Dim objContext As ObjectContext
Dim objRequest As Request
Set objContext=GetObjectContext()
Set objRequest=objContext("Request")
'以下的一段代碼是進(jìn)行文件存貯的有關(guān)操作
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)
'創(chuàng)建一個(gè)二進(jìn)制文件并將FormData寫入其中
Open Pathname For Binary As 1
Put #1,,FormData
Close #1
SaveFile="OK!"
End Function 此方法是利用ADO STREAM中提供的二進(jìn)制文件操作方法來完成,保存文件的語句是: StreamOBJ.SaveToFile (fileName,2)。在這種操作中,我們可以將有關(guān)的操作存放在一個(gè)類文件中,在應(yīng)用時(shí),直接將該類文件包含在ASP程序中就可以了。具體處理方法,請(qǐng)參閱有關(guān)介紹。 |
|