使用表單上傳檔案的過程及需要考慮的問題

2021-07-23 11:59:08 字數 2340 閱讀 6795

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是用來制定傳輸資料的特殊型別的,主要就是我們上傳的非文字的內容...