天天看點

檔案上傳--Smartupload上傳元件【中】

表單封裝問題

在smartupload上傳元件【上】中我們學習了smartupload上傳的應用,但是我們說那個程式有一點問題,什麼問題呢?我們已經知道了要進行檔案上傳,則肯定要對表單進行封裝,問題就在表單封裝這裡,表單一旦封裝之後,就無法使用request.getparameter()來接受參數了。例如:在表單中定義了姓名等變量,在.jsp中就不能用request.getparameter()來接受這個名字了。一個例子看一下到底怎麼不能接受。

有了.html頁了 再來做.jsp頁面用來接受圖檔和姓名

在smart_02.jsp中用了request.getparameter()來接受參數,但是運作一下(如下圖):結果為null  是一個空值。

檔案上傳--Smartupload上傳元件【中】

也就是說根本就無法接受參數,而且使用getparametervalues()也無法接受,因為在smart_02.html中,姓名屬性随着表單被封裝了,所有的資料不再是文本了,而是二進制byte流了,那麼這個時候要想接受參數就必須使用smartload中提供的方法支援。

這個時候在運作一下,結果就能正常顯示了,但是又有一個新的問題出現了,細心的讀者就會發現,如果兩次都上傳同一張圖檔,那麼在upload檔案夾中隻是存在了一張圖檔,也就是說第二次上傳的圖檔覆寫了第一張,它是 一個覆寫的過程,但是我們希望兩張一樣的圖檔都能上傳,并且讓他們的名字不一樣那該怎麼辦?

為上傳檔案自動命名功能

大家應該都有過這樣的經曆:在網上下載下傳一張圖檔,點選右鍵圖檔另存為,接着會彈出圖檔儲存的路徑的對話框(如下圖),紅色區域的名字為一串看不懂的字元,那個字元就是系統為圖檔自動命名的,而我們所要實作的就是為上傳的圖檔自動配置設定名字。

檔案上傳--Smartupload上傳元件【中】

關于自動命名功能的實作原理

    如果多個使用者上傳的檔案名稱一樣,則肯定會發生覆寫的情況,為了解決這種問題,可以采用為上傳檔案自動命名的方式,為了防止重名,自動命名可以采用如下格式:

       1.  ip位址+時間戳+三位随機數

        2. 例如:現在連接配接的ip位址為192.168.12.19,日期時間是:2013-03-02 17:58:12,三位随機數為678,則拼湊出的新檔案名稱就是19216801201920130302125812678.檔案字尾名

為了進行檔案字尾的拼湊,我們建立一個專門用于此種操作的類---iptimestamp,此類作為一個javabean,在simple包下建立。

将smart_02.jsp改成如下:

我們來運作一下,寫上我的名字:趙玉強,然後上傳一張名字為dahai.jpg的圖檔,結果如下:

檔案上傳--Smartupload上傳元件【中】

可以看見圖檔和名字都能夠正常顯示,我們在來看一下upload檔案中是否上傳上了圖檔呢?而且圖檔的名字是否是系統自動命名的呢?打開tomcat/webapps下的項目找到upload檔案夾。圖檔确實有了,如下圖所示:

檔案上傳--Smartupload上傳元件【中】

 可以發現上傳的圖檔的名字不是上傳之前的名字了,而是系統自動上傳的名字,而且不管對同一張圖檔上傳多少次,都不會出現隻有一張的情況了,因為系統會自動配置設定給上傳圖檔不同的名字。

繼續閱讀