ASP無組件上傳·從原理剖析到實踐(中)

來源:互聯網
上載者:User
上傳|無組件 第五天:得到檔案單元

今天我們要進行的部分,是比較有趣味性地——得到檔案內容。其實,看看我們的要處理的資料,再看看前天文本單元的處理,相信大家也會心中有數。

為了清晰的區分檔案和文本單元,這一次,我們用ourRequest.file(index)來對應文本單元的ourRequest.form(index)。當然,因為對於檔案,我們需要得到的資訊不同於文本,所以這次得到的,也不會是FormElement,而是一個新對象FileElement。

檔案單元和文本單元在未經處理資料上,不同點少得可憐:
1。第一行多了一個filename="xxx"模組;
2。多了一個用於指示contentType的第二行。

感興趣的目標資訊不同,所以,得到的對象FileElement也和FormElement有一些不同點:
1。不需要count屬性(不存在checkbox情況);
2。不需要Item(index)(同上,不存在checkbox情況);
3。需要一個ContentType屬性;
4。需要一個FilePath屬性;
5。需要一個FileName屬性;
6。需要一個Size屬性;
7。因為需要的是二進位,所以,沒有必要進行二進位=>字串的轉換;
8。因為需要的是二進位,所以,屬性Value改成Data更合適

此外,UploadRequest也應該相應的添加Files屬性、Form(index)方法、以及m_dicFiles成員。現在,我們就來擴充他:
A。UploadRequest(上面設計過,這裡是擴充)
這個類和request對象是對應的
屬性:
RawData 得到未經處理資料,方便檢查[唯讀]
Forms 得到一個有count屬性的計數器,
可以用outRequest.Forms.Count的方式,得到文本表單域的的個數[唯讀]
Files 得到一個有count屬性的計數器,
可以用outRequest.Files.Count的方式,得到檔案表單域的的個數[唯讀]
Form(index) 可以用數字或文本檢索文本表單域,做用類似request.form。
他返回一個FormElement型的對象
File(index) 可以用數字或文本檢索檔案表單域,他返回一個FileElement型的對象
B。FileElement
可以把它看成單個檔案域的化身。通過這個類,可以得到詳細的檔案資訊,比如name,data,path,filename,contentType,size等等。
屬性:
Name 檔案域的名稱。就是<input type=file name=xxx>裡的xxx
Data 檔案域的內容。二進位串
ContentType 檔案域的contentType
FilePath 檔案域包含的檔案在客戶機上的全路徑
FileName 檔案域包含的檔案的檔案名稱
Size 檔案域包含的檔案的尺寸

這裡是實現。還是存成doupload.asp:
<%
'=========================================================================
'' 這個,是儲存文本域資訊的的類。每一個name的文本域,對應一個這樣的類。
'=========================================================================
Class FormElement

' m_開頭,表示類成員變數。
Private m_dicItems

Private Sub Class_Initialize()
Set m_dicItems = Server.CreateObject("Scripting.Dictionary")
End Sub

' count是咱們這個類的一個唯讀屬性
Public Property Get Count()
Count = m_dicItems.Count
End Property

' Value是一個預設屬性。目的是得到值
Public Default Property Get Value()
Value = Item("")
End Property

' Name是得到文本網域名稱稱。就是<input name=xxx>裡的xxx
Public Property Get Name()
Keys = m_dicItems.Keys
Name = Keys(0)
Name = left(Name,instrrev(Name,"_")-1)
End Property

' Item屬性用來得到重名表單域(比如checkbox)的某一個值
Public Property Get Item(index)
If isNumeric(index) Then '是數字,合法!
If index > m_dicItems.Count-1 Then
err.raise 1,"IndexOutOfBound", "表單元素子集索引越界"
End If
Itms = m_dicItems.Items
Item = Itms(index)
ElseIf index = "" Then '沒給值?那就返回所有的!逗號分隔
Itms = m_dicItems.Items
For i = 0 to m_dicItems.Count-1
If i = 0 Then
Item = Itms(0)
Else
Item = Item & "," & Itms(i)
End If
Next
Else '給個一個不是數位東東?出錯!
err.raise 2,"IllegalArgument", "非法的表單元素子集索引"
End If
End Property

Public Sub Add(key, item)
m_dicItems.Add key, item
End Sub

End Class

'=========================================================================
'' 這個,是隱藏檔域資訊的的類。每一個name的檔案,對應一個這樣的類。
'=========================================================================
Class FileElement

' m_開頭,表示類成員變數。
Private m_strName
Private m_bData
Private m_strContentType
Private m_strFilePath
Private m_strFileName
Private m_lSize

' Data是一個預設屬性。目的是得到值
Public Default Property Get Data()
Data = m_bData
End Property

' Name是得到檔案網域名稱稱,就是<input type=file name=xxx>裡的xxx
Public Property Get Name()
Name = m_strName
End Property

' ContentType是得到檔案contentType
Public Property Get ContentType()
ContentType = m_strContentType
End Property

' FilePath是得到檔案在用戶端的路徑
Public Property Get FilePath()
FilePath = m_strFilePath
End Property

' FilePath是得到檔案在用戶端的路徑
Public Property Get FileName()
FileName = m_strFileName
End Property

' Size是得到檔案大小
Public Property Get Size()
Size = m_lSize
End Property

Public Sub Add(name, data, contenttype, path)
m_strName = name
m_bDat



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.