1》實現web開發中的文件上傳功能,需完成以下二步操做:web
1.在web頁面中添加上傳輸入項瀏覽器
1.1jsp中實現上傳文件的三要素:首先form的提交方式爲post, 其次enctype 爲multipart/form-data,最後必須有name屬性【" name="upload"】安全
<form action="" method="post" enctype="multipart/form-data">
<input type="text">
<input type="file" value="上傳" name="upload" id="upload" />
<input type="submit" value="提交">
</form>服務器
2.在servlet中讀取上傳文件的數據,並保存到服務器硬盤中jsp
1、建立DiskFileItemFactory對象,設置緩衝區大小和臨時文件目錄post
2、使用DiskFileItemFactory 對象建立ServletFileUpload對象,並設置上傳文件的大小限制。ui
3、調用ServletFileUpload.parseRequest方法解析request對象,獲得一個保存了全部上傳內容的List對象。編碼
4、對list進行迭代,每迭代一個FileItem對象,調用其isFormField方法判斷是不是上傳文件url
上傳的細節問題:orm
1.上傳的中文亂碼問題:
// 設置保存文件的編碼方式,設置和jsp一致,實現文件名稱的中文亂碼問題
upload.setHeaderEncoding("GBK");
2.上傳的文件的時候,在不一樣瀏覽器下,對應 fileName的格式不同。在servlet端中使用
fileName = fileName.replaceAll("\\\\", "/");
fileName = fileName.substring(fileName.lastIndexOf("/") < 0 ? 0 : fileName.lastIndexOf("/") + 1);
String fileExt = fileName.substring(fileName.lastIndexOf(".")); //獲取上傳文件的後綴名
來解決
3.上傳文件的存放問題:
1:爲了文件的安全,存放在web-inf目錄下或者不收web服務器管理的目錄(例如C盤下的文件),由於若是存放在不是上述的兩種狀況的目錄,會形成在瀏覽器輸入url直接能夠訪問的狀況。
2:爲了不上傳的文件在一個文件夾下面不少,能夠根據用戶的不一樣來進行分別建立文件夾存放不一樣用戶的上傳資料
3:爲了防止不一樣用戶上傳的同名文件形成的覆蓋問題,應該使用 uuid進行名稱的惟一化來區分