檔案上傳概述
上傳檔案對頁面的要求
必須使用表單,而不能是超連結。
表單的 method 必須是 post,而不能是 get。
表單的 enctype 必須是 multipart/form-data。
在表單中新增 file 表單字段,即
上傳檔案表單與普通檔案表單的區別
檔案上傳表單的 enctype=「multipart/from-data」,表示多部件表單資料。
普通文字表單可以不設定 enctype屬性:
檔案上傳對servlet的要求
request.getparameter(string name)方法獲取指定的表單字段字元內容,但上傳表單已經不在是字元內容,而是位元組內容,所以失效。
這時我們可以使用request的getinputstream()方法獲取serveltinputstream物件。它是inputstream的子類,這個servletinputstream物件對應整個表單的正文部分(從第乙個分割線開始,到最後)。
fileupload
fileupload是由apache的commons元件提供的上傳元件。它最主要的工作就是幫我們解析request.getinputstream()。
fileupload元件需要的jar包:
fileupload的核心類有:diskfileitemfactory,servletfileupload,fileitem。
使用fileupload元件的步驟如下:
建立工廠類diskfileitemfactory物件:diskfileitemfactory factory = new diskfileitemfactory();
使用工廠建立解析器物件:servletfileupload fileupload = new servletfileupload(fctory);
使用解析器來解析request物件:listlist = fileupload.parserequest(request);
方法:string getname():獲取檔案欄位的檔名稱。
string getstring():獲取欄位的內容,如果是檔案字段,那麼獲取的是檔案內容,當然上傳的檔案必須是檔案檔案。
string getfileldname():獲取欄位名稱,例如:返回的是username。
string getcontenttype():獲取上傳的檔案的型別,例如:text/plain。
long getsize():獲取上傳檔案的大小。
boolean isformfield():判斷當前表單字段是否為普通文字字段,如果返回false,說明是檔案字段。
inputstream getinputstream():獲取檔案上傳檔案對應的輸入流。
void write(file file):把上傳的檔案儲存到指定檔案中。
小例子:
//建立接收檔案的工廠類
diskfileitemfactory factory = new diskfileitemfactory();
//建立檔案解析物件
servletfileupload sfu = new servletfileupload(factory);
try
} catch (fileuploadexception e)
檔案上傳細節
把檔案上傳放到web-inf目錄下
如果沒有把使用者上傳的檔案存放到web-inf目錄下,那麼使用者就可以通過瀏覽器直接訪問上傳的檔案,這是非常危險的。可以使用瀏覽器進行訪問上傳的檔案。
web-inf裡面的檔案都是受保護的,將隱私的檔案放到web-inf中可以提高檔案的安全性。
中文亂碼問題
上傳檔案中包含中文:
裡面的name為"utf-8"編碼方式。
上傳檔案的檔案內容包含中文:
文字檔案內容和普通表單項內容使用fileitem類的getstring(「utf-8」)來處理編碼。
上傳檔案同名問題(檔案重新命名)
處理這一問題,我們可以使用uuid生成唯一名稱。
上傳的單個檔案的大小限制
限制上傳檔案的大小很簡單,servletfileupload類的setfilesizemax(long)
就可以了。引數就是上傳檔案的上限位元組數,例如:servletfileupload.setfilesizemax(1024*10)
表示上限為10kb。
一旦上傳的檔案超出了上限,那麼就會丟擲fileuploadbase.filesizelimitexceededexception異常
。
resp.setcharacterencoding("utf-8");
resp.setcontenttype("text/html;charset=utf-8");
//建立接收檔案的工廠類
diskfileitemfactory factory = new diskfileitemfactory();
//建立檔案解析物件
servletfileupload sfu = new servletfileupload(factory);
//解析request
try
} }} catch (exception e)
日常學習筆記 PHP上傳檔案時許可權問題
1 php使用move uploaded file 函式上傳檔案時,伺服器準備就緒,但上傳失敗的原因之一。資料夾結構 html檔案 php檔案 images資料夾 均在files資料夾中。獲得 file files file 獲取資訊 filename file name type file typ...
檔案上傳筆記
使用filereader介面讀取檔案 一 filereader介面的常用方法 readasbinarystring file 以二進位制的方式讀取檔案內容 readasarraybuffer file 以陣列緩衝的方式讀取檔案內容 readasdataurl file 以資料url的方式讀取檔案內容...
HttpClient post 上傳檔案 筆記
上傳一般的引數 將表單的值放入postmethod中 postmethod.setrequestbody data 執行postmethod int status client.executemethod postmethod system.out.println status 狀態 上傳帶附件的引...