使用jsp完成檔案可定製上傳

來源:互聯網
上載者:User
js  這幾天的工作主要圍繞著檔案(主要是圖片)上傳,並可以線上和HTML編輯器整合,操作簡便與目前引用網上圖片相似。我是有點小看了這件事情,不過也不無道理:一來以前使用servlet完成過,其中的核心DoUpLoadBean也的確是可以工作;其次整合到編輯器則在使用php的本人的私人部落格上做過,看不出有什麼特別難的地方。但實際上在展開後就發現,簡單實現上傳是容易的,但要合理地安排上傳的策略,就不得不小心翼翼。因為允許上傳本身是非常需要危險的,這實際上是開了一個口子;允許客戶對伺服器進行事實上的操作,上傳攻擊從來就不是一件困難,更不是一件罕見的事情;可以想見一旦系統開通,這類攻擊必然就會發生。

    另一方面,在允許使用者上傳本地檔案同時就必須考慮後期的管理,因為,即使是在使用者本地,最大的硬碟也會過不多久就會給說不清是什麼東西的垃圾佔滿;何況現在是允許許多人同時使用的伺服器,如果沒有精確的策略,花不了多長時間,客戶的上傳檔案就會把系統撐爆。就在上一個星期,一位朋友向我求助,說是他們的資料庫達到30G,把硬碟吃光了,結果死了機;對此,本人只能是愛莫能助,因為,可以肯定裡面絕大部分是垃圾,卻搞不清什麼是垃圾,什麼是必須的。因為,他們缺乏一個策略。而且,就算使用者不是惡意的,大部分情況下,在開通開載的時侯,很快硬碟也會撐滿,如果這是系統硬碟,通常就意味著崩潰,可見,必須使用串連把上傳限制到另一個專用的分區,以確保安全。通常鐵quota在這裡是派不上用場的,因為那需要把WEB帳號與作業系統帳號結合,既複雜又危險,更加沒有這個必要。同時,上傳的檔案如果不是給每個使用者指派目錄,也應該是在每個使用者的名稱前增加一個首碼,以供識別;這樣,萬一需要清理,配合檔案日期,可以使用find/grep/rm組合指令碼進行備份或清除,至少是有可能的。
      還有其他因素,導致上傳檔案實際操作比簡單接愛一個檔案上傳的程式量要大得多;其中主要包括許可權控制,(考慮到可以用上傳進行攻擊,這條不得不小心點),檔案管理,以及修改屬性,包括大小,類型限制,可以方便修改儲存的方式等等,事實上,就完成情況下,上傳部分只花了五行程式,而管理則不小於50行。
      今天已經不必再自已寫輸入資料流了,就算自已沒有積累,還是可以從網上找到開源的代碼,象jakarta commons upload就是一個。這個東西沒有什麼例子,所找到的例子大部分是跑不動的,倒不是怪程式員自已,而是這個東西不但沒有什麼文檔,還把方法和類也改了:例子說的UpLoad實際上是DiskUpload,而當前的Upload有什麼區別,為什麼可以省去設定記憶體耗量的等部分,我找不到任何的解釋。雖然對自已的代碼有所偏愛,但由於My Code不能處理多個file上傳,雖然,這種情況實際上也很少,我卻一直弄不明白有什麼辦法可以識別不止一個上傳請求,這意味著我對RFC1864仍是欠瞭解的,既然有更可靠的東東,就不要太偏心自已的東西了,結果把用了幾年的DoUploadBean徹底地埋葬了。
       在選擇是使用jsp還是servlet處理上傳時,顯然兩者中servlet更規範一點,但在許可權控制上頗為不便,因為,所以識別變數必須通過 request擷取,這也意味著存在用戶端偽造變數直接提交上傳的可能性,確保正確識別意味著大量的代碼。我最終決定採用自已發明的使用jsp標籤取代 servlet的辦法,(參看《可以使用多個jsp標籤達到類似servlet效果》一文)。結果表明,這的確是兼有 jsp/servlet/javabean優點的好辦法,特別是修改非常容易,我改個主意要以使用者名稱稱開目錄,只是改了標籤一個定義屬性就搞妥了,這才真是易用性的體現。

最終的使用方法很簡單:

<command:saveupload byform="false" noredirect="true" filename="theimg" roles="SECTION" dir="${filepath}" max="20000000"/>

這樣,saveupload標籤就會自動檢測許可權,並按科室中定義的管理組允許其中的成員上傳,上傳到科室下的upload目錄中的使用者名稱稱建立的專用目錄中,而存檔的檔案名稱使用theimg名稱供用戶端嵌進正在編輯的文本中。

這樣,上傳就真正成為一個可以自由方便地使用的組件了。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.