經典ASP上傳映像的方法

來源:互聯網
上載者:User

最近我接手了一個項目,它將一個保修申請(Warranty Claim)系統搬到網上。項目的重頭戲是儲存和保修申請有關的映像。我選用的組件包括:

 · 一個資料庫表來儲存映像
 · 一個ASP網頁來上傳映像
 · 一個指令碼用於解釋上傳的映像,並把它們儲存到表中
 · 一個網頁用於查看與選定的申請號碼對應的映像名稱
 · 一個網頁用於顯示實際映像
 
下面來仔細研究一下應用程式的每個組件。


由於我只是想快速驗證一下方案的可行性,所以使用的是Microsoft Access,而不是SQL Server、Oracle或者MySQL等更可靠的資料庫。由於要處理的資訊肯定不止保修申請和映像,所以表中也肯定不止包含2列,如圖A所示。這些列是的含義是不言而喻的,惟一值得一提的就是映像的內容類型(content_type),它是指圖形檔案的資料類型。OLE Object用於取代二進位大對象(BLOB),因為我們使用的是Access。

圖A


上傳頁面

得到這份工作後,我花了約10分鐘的時間思索怎樣從用戶端將一個檔案上傳到ASP伺服器。後來,我想起HTML input元素有一個type屬性,它可設為file。同時也想起了accept屬性,它有助於根據MIME類型來篩選列出的檔案。但遺憾的是,這種實現品質不是很高。

form元素是上傳頁面中的最後一個“用戶端”部分。該元素由於牽涉到檔案上傳,所以必然要進行特殊處理,具體就是將method屬性設為post,並將enctype屬性設為multipart/form-data,這是一次性發送多個檔案的標準做法。最後,在使用用戶端javascript的情況下,為了確保文本與檔案在表單提交時是分離的,我為表單的action屬性添加了申請號碼(claim number)。圖B展示了最終的網頁,代碼如清單A所示。

圖B


伺服器端指令碼

表單被提交後,表單的action屬性所指定的指令碼將獲得控制權。該指令碼決定以後要採取的操作。後期工作實際很簡單,因為申請號碼、所有檔案以及這些檔案的屬性都是由用戶端一次性發送過來的。還可採取程式化的方式分離這些資料,但我選擇使用aspSmart免費提供的aspSmartUpload組件來分離不同的檔案。該組件包括文檔和樣本,極大簡化了我的工作。

aspSmartUpload組件的Files對象提供了一個方法來訪問集合中的單獨檔案。每個檔案的屬性是用File對象來檢索的,這些屬性包括檔案名稱、MIME類型、MIME子類型以及檔案本身。


映像列表和顯示

如果同時根據申請號碼和檔案名稱來列出映像,要比單純顯示映像合理得多。這樣一來,撥號使用者就可選擇自己需要的一幅映像,而不至於使頻寬吃緊。考慮到這一點,我建立了如圖C所示的網頁。它的代碼如清單B所示。

圖C


 

通常,當一幅映像在網頁上顯示時,映像本身是來源於一個檔案的。例如,內容類型是根據副檔名而確定的,比如whatever.jpeg或者stuff.gif。但遺憾的是,由於映像儲存在一個表中,所以我們無法享受這一便利。不過,我們的優勢在於已經掌握了內容類型。

在由快顯視窗、一個IFrame或者一個Frame調用的指令碼中,可利用內容類型來設定Response對象的內容類型,並將映像以二進位形式寫入,具體方式如下:

Response.ContentType = rsImage("content_type")
Response.BinaryWritersImage("picture")

清單C展示了細節。


不要被實現細節阻撓

一般人最開始都知道這個項目肯定能實現,但等具體做起來,才發現實現細節嚴重影響了自己的進度。碰到這種情況,不要灰心,只有步步為營,才能最終取得成功。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。