21、檔案上傳/下載

來源:互聯網
上載者:User

標籤:file   multipart   tco   ica   編碼   避免   com   username   部分   

一、檔案的上傳和下載要將用戶端(瀏覽器)大資料存放區到伺服器端,不將資料直接儲存到資料庫中,而是要將資料存放區到伺服器所在的磁碟上(減少了資料庫伺服器的壓力,對資料的操作更加靈活) 1、檔案上傳的原理 1.1 檔案上傳的必要前提:(1)提供form表單,method必須是post(2)form表單的enctype(編碼類別型)必須是 multipart/form-data(3)提供input type="file"類的上傳輸入欄位 ${pageContext.request.contextPath }:絕對路徑 1.2 enctype屬性告知伺服器請求本文的MIME(檔案類型)類型。(請求訊息頭:Content-Type作用是一致的) 可選值:application/x-www-form-urlencoded(預設):本文:name=admin&password=123伺服器擷取資料:String name = request.getParameter("name");multipart/form-data:本文伺服器擷取資料: request.getParameter(String)方法擷取指定的表單欄位字元內容,但檔案上傳表單已經不在是字元內容,而是位元組內容,所以失效。檔案上傳本質:解析請求本文的每部分的內容  2、藉助第三方的上傳組件實現檔案上傳2.1 fileupload概述fileupload是由apache的commons組件提供的上傳組件。它最主要的工作就是幫我們解析request.getInputStream() 匯入commons-fileupload相關jar包(1)commons-fileupload.jar,核心包(2)commons-io.jar,依賴包 2.2 fileupload的核心類有:DiskFileItemFactory、ServletFileUpload、FileItem 解析原理  2.3 fileupload簡單應用使用fileupload組件的步驟如下:(1)建立工廠類DiskFileItemFactory對象DiskFileItemFactory factory = new DiskFileItemFactory()(2)使用工廠建立解析器對象ServletFileUpload fileUpload = new ServletFileUpload(factory)(3)使用解析器來解析request對象List<FileItem> list = fileUpload.parseRequest(request) FileItem對象對應一個表單項(表單欄位),可以是檔案欄位或普通欄位boolean isFormField():判斷當前表單欄位是否為普通文字欄位,如果返回false,說明是檔案欄位;String getFieldName():擷取欄位名稱,例如:<input type=”text” name=”username”/>,返回的是username;String getString():擷取欄位的內容,如果是檔案欄位,那麼擷取的是檔案內容,當然上傳的檔案必須是文字檔;String getName():擷取檔案欄位的檔案名稱;(a.txt)String getContentType():擷取上傳的檔案的MIME類型,例如:text/plain。int getSize():擷取上傳檔案的大小;InputStream getInputStream():擷取上傳檔案對應的輸入資料流;void write(File):把上傳的檔案儲存到指定檔案中。delete(); 3、檔案上傳時要考慮的幾個問題(1)保證伺服器的安全把儲存上傳檔案的目錄放在使用者直接存取不到的地方。 (2)避免檔案被覆蓋讓檔案名稱唯一即可 (3)避免同一個檔案夾中的檔案過多方案一:按照日期進行打散儲存目錄方案二:用檔案名稱的hashCode計算打散的儲存目錄:二級目錄 (4)限制檔案的大小:web方式不適合上傳大的檔案單個檔案大小:ServletFileUpload.setFileSizeMax(位元組)總檔案大小:(多檔案上傳)ServletFileUpload.setSizeMax(位元組) (5)上傳欄位使用者沒有上傳的問題通過判斷檔案名稱是否為空白即可 (6)臨時檔案的問題DiskFileItemFactory:作用:產生FileItem對象內部有一個緩衝,緩衝大小預設是10Kb。如果上傳的檔案超過10Kb,用磁碟作為緩衝。存放快取檔案的目錄在哪裡?預設是系統的臨時目錄。 如果自己用IO流實現的檔案上傳,要在流關閉後,清理臨時檔案。FileItem.delete();  4、檔案的下載     

21、檔案上傳/下載

聯繫我們

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