日常筆記 檔案上傳

2021-09-11 20:11:08 字數 2835 閱讀 1887

檔案上傳概述

上傳檔案對頁面的要求

必須使用表單,而不能是超連結。

表單的 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 狀態 上傳帶附件的引...