1.1 檔案上傳的必要前提:
a、提供form表單,method必須是post
b、form表單的enctype必須是multipart/form-data
c、提供input type="file"類的上傳輸入域
1.2 enctype屬性
伺服器獲取資料:request.getparameter(string)方法獲取指定的表單字段字元內容,但檔案上傳表單已經不在是字元內容,而是位元組內容,所以失效。
檔案上傳:解析請求正文的每部分的內容。
2.1 fileupload概述
fileupload是由apache的commons元件提供的上傳元件。它最主要的工作就是幫我們解析request.getinputstream()。
匯入commons-fileupload相關jar包
commons-fileupload.jar,核心包;
commons-io.jar,依賴包。
2.2 fileupload的核心類有:
diskfileitemfactory、servletfileupload、fileitem。
a、解析原理
2.2 fileupload簡單應用
使用fileupload元件的步驟如下:
1. 建立工廠類diskfileitemfactory物件:
diskfileitemfactory factory = new diskfileitemfactory()
2. 使用工廠建立解析器物件:
servletfileupload fileupload = new servletfileupload(factory)
3. 使用解析器來解析request物件:
list list = fileupload.parserequest(request)
fileitem物件對應乙個表單項(表單字段)。可以是檔案欄位或普通字段
boolean isformfield():判斷當前表單字段是否為普通文字字段,如果返回false,說明是檔案字段;
string getfieldname():獲取欄位名稱,例如:,返回的是username;
string getstring():獲取欄位的內容,如果是檔案字段,那麼獲取的是檔案內容,當然上傳的檔案必須是文字檔案;
string getname():獲取檔案欄位的檔名稱;(a.txt)
string getcontenttype():獲取上傳的檔案的mime型別,例如:text/plain。
int getsize():獲取上傳檔案的大小;
inputstream getinputstream():獲取上傳檔案對應的輸入流;
void write(file):把上傳的檔案儲存到指定檔案中。
delete();
3、檔案上傳時要考慮的幾個問題(經驗分享)
a、保證伺服器的安全
把儲存上傳檔案的目錄放在使用者直接訪問不到的地方。
b、避免檔案被覆蓋
讓檔名唯一即可
c、避免同乙個資料夾中的檔案過多
方案一:按照日期進行打散儲存目錄
方案二:用檔名的hashcode計算打散的儲存目錄:二級目錄
d、限制檔案的大小:web方式不適合上傳大的檔案
單個檔案大小:
servletfileupload.setfilesizemax(位元組)
總檔案大小:(多檔案上傳)
servletfileupload.setsizemax(位元組)
e、上傳字段使用者沒有上傳的問題
通過判斷檔名是否為空即可
f、臨時檔案的問題
diskfileitemfactory:
作用:產生fileitem物件
內部有乙個快取,快取大小預設是10kb。如果上傳的檔案超過10kb,用磁碟作為快取。
存放快取檔案的目錄在**?預設是系統的臨時目錄。
如果自己用io流實現的檔案上傳,要在流關閉後,清理臨時檔案。
fileitem.delete();
使用form表單上傳檔案
在使用form表單上傳檔案時候,input type file 是必然會用的,其中有一些小坑需要避免。1 form的 enctype multipart form data 已經是個老生常談的問題了,相信都能注意到,就不多說了。3 當使用input type file 的onchange事件來觸發檔...
使用form表單上傳檔案(一)
今天在專案中要寫乙個上傳檔案的功能,使用jsp中的form表單的形式完成。首先新建乙個jsp,使用最原始的form表單來完成。jsp中的 如下,很簡單 因為是要上傳檔案,所以form表單中的enctype屬性必須是 multipart form data 因為是post請求,所以method屬性是p...
asp web做檔案上傳,需要在表單用上
web做檔案上傳,需要 multipart form data enctype這個屬性管理的是表單的mime編碼。共有三個值可選 2 multipart form data 3 text plain multipart form data是用來制定傳輸資料的特殊型別的,主要就是我們上傳的非文字的內容...