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

來源:互聯網
上載者:User
上傳|無組件 第七天:實現附加功能

今天,我們就來實現昨天提出的方法和屬性,來完善我們的檔案上傳類。以前沒有太注意的效能問題,這一次也要徹底的解決:
1。所有的變數先聲明,後使用;
2。設定類的teminate方法;
3。簡化有些地方的寫法,注意細節。
我們的原則,就是先實現,後最佳化。當然,象變數聲明這樣的東西,如果程式很大,最好還是在寫程式的時候一次過。如果寫完了才加,可以在頁面開頭加上option explicit(強制變數聲明),然後測試所有的方法和屬性,直到沒有錯誤為止。

另外,異常代碼我們也整理一下:
代碼 類名 類型 描述
==============================================================================
11 FormElement IndexOutOfBound 表單元素子集索引越界
12 FormElement IllegalArgument 非法的表單元素子集索引
21 UploadRequest IndexOutOfBound 文本元素索引越界
22 UploadRequest IllegalArgument 非法的文本元素索引
23 UploadRequest IndexOutOfBound 檔案元素索引越界
24 UploadRequest NullRef 檔案元素索引不存在
25 UploadRequest IllegalArgument 非法的表單元素索引
26 UploadRequest TooLargeFile 檔案%fldname尺寸過大
27 UploadRequest TooLargeFiles 檔案總尺寸過大
28 UploadRequest InvalidFileType 檔案%fldname類型錯誤

好了,下面的,就是我們的整個實現了:
1。com.2yup.util.uploadrequest.class
<%
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 沒有著作權,歡迎拷貝或是作為商業用途。
' 如果要轉載,能註明出處最好,我們會很感激您的支援;如果不方便,就算了,呵呵。
' 感謝各位常來2yup的網友(很多名字,寫不下了,呵呵)長期熱情的支援,
' 你們是我持久的動力。
'
' 關於這個組件的詳細資料,以及編程的全過程,可以來
' http://www.2yup.com/asp
' 的文檔中心看個究竟。有任何疑問,歡迎來我們的論壇討論,或是給我發email:
' miles2yup@hotmail.com
' ---- Miles [Yup Studio] ^ ^
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'=========================================================================
'' 這個,是儲存文本域資訊的的類。每一個name的文本域,對應一個這樣的類。
'=========================================================================
Class FormElement

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

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

' set nothing時激發。清理資源
Private Sub Class_Terminate()
Set m_dicItems = Nothing
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()
Dim Keys
Keys = m_dicItems.Keys
Name = Keys(0)
Name = left(Name,instrrev(Name,"_")-1)
End Property

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

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

' 這個屬性很尷尬——stream對象write方法要求的資料類型是
' "A Variant that contains an array of bytes to be written."
' 但是我卻無法從一個二進位串中得到這個資料類型!的確很奇怪。所以,我打算
' 使用符合要求的未經處理資料m_bRawData。但是,vbs的類功能少得可憐,既不能傳遞
' 當前對象的引用來回訪UploadRequest的m_bRawData也不能用inner class的方
' 法進行組織。為了保持方法的簡潔,所以加了這個唯寫的RawData屬性。
' 這個地方很值得改進。
Public Property Let RawData(data)
m_bRawData = data
End Property

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

' ContentType是得到檔案contentType
Public Pro



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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