fileupload的主要功能是上傳文件到服務器,或提供給客戶端下載文件,使用fielupload時需要注意以下幾點:
1、上傳文件使用的都是form表單,表單有兩種:
一種是默認的普通表單,它不能上傳文件。它的屬性值默認是enctype="application/x-www-form-urlencoded"。表示使用瀏覽器上一次解析頁面的方式進行編碼表單裏的數據。
第二種是混合表單,它可以上傳文件。必須設置它的屬性enctype="multipart/form-data"。表示該表單項是混合出現的,不能進行編碼。
2、在使用setFileSizeMax(param);時,param的大小是B(字節)爲單位。
3、當定義了一個FileItme的對象item,String fileName = item.getName()時,使用IE7 fileName只有文件名 使用IE6 包含了路徑,因此必須進行截取fileName = fileName.substring(fileName.lastIndexOf("/")+1);
4、當文件上傳完畢後,會存在着臨時文件,需要手動刪除(假設定義FileItme的對象item,刪除item.delete())。
附加:常見的文件MIME類型:
(.exe文件或未知的文件類型)--->application/octet-stream
(txt文本)--->text/plain
(html網頁)--->text/html
(.jpg圖片)---->image/pjpeg
(.png圖片)---->image/x-png
(.avi視頻)---->video/avi
(.execul的表格)---->application/vnd.ms-excel
java代碼使用示例:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 創建工廠類對象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2. 創建文件上傳對象
ServletFileUpload upload = new ServletFileUpload(factory);
// 3. 判斷表單類型
if(ServletFileUpload.isMultipartContent(request)){
try {
// 4.混合表單
List<FileItem> list = upload.parseRequest(request);
// 5. 遍歷對象
for(FileItem item:list){
// 6. 判斷是否是普通字段還是文件字段
if(item.isFormField()){
// 普通字段
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+"="+value);
}else{
// 文件字段
String name = item.getFieldName();
String value = item.getString();
String fileName = item.getName();
String fileType = item.getContentType();
// 獲取文件流
InputStream in = item.getInputStream();
// 定義上傳的目錄
String dir = this.getServletContext().getRealPath("/WEB-INF/uploads");
File file = new File(dir,fileName);
FileOutputStream out = new FileOutputStream(file);
byte[] b = new byte[1024];
int len = 0;
// 循環邊讀邊寫
while((len = in.read(b)) != -1){
out.write(b, 0, len);
}
// 釋放資源
in.close();
out.close();
}
}
} catch (Exception e) {
System.out.println("上傳失敗");
}
}else{
// 普通表單
return;
}
}