網絡上關於Commons-fileupload的使用說明已經很多了,這些暫時就不提了,介紹一下要注意的事項:
1.導入jar包:
我們需要兩個jar包,因爲Common-fileupload.jar又同時依賴於Common-io.jar(稍後我就上傳)。
在這裏本人犯了個大錯誤,希望新學者也要注意,不僅僅要導入jar包到Java Resources的Libraries中,千萬別忘了也導入到WEB-INF的lib中。
2.基本的語句:
上傳頁面中的form:
<form method="post" action="UploadServlet" enctype="multipart/form-data">
<p>upload</p>
<input type="file" name="file" size="50" />
<input type="submit" value="submit" />
</form>
千萬別忘了enctype屬性的設置。
處理的Servlet,別人介紹的很多了,這裏貼碼不說。
還是要多說一句非常關鍵的地方:
3.關於字符集。
我的網頁默認字符集是“UTF-8”,上傳到Servlet中一定要將request重新設置一下字符集,否則會出現中文的亂碼情況。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
request.setCharacterEncoding("UTF-8");
String message = "";
String path = getServletContext().getRealPath("/")+"upload";
System.out.println(path);
File folder = new File(path);
if(!folder.exists())
{
folder.mkdirs();
}
try
{
if(ServletFileUpload.isMultipartContent(request))
{
DiskFileItemFactory disk = new DiskFileItemFactory();
disk.setSizeThreshold(200*1024);
disk.setRepository(disk.getRepository());
ServletFileUpload upload = new ServletFileUpload(disk);
int maxSize = 2*1024*1024;
List list = upload.parseRequest(request);
Iterator i = list.iterator();
while(i.hasNext())
{
FileItem fm =(FileItem)i.next();
if(!fm.isFormField())
{
String filePath = fm.getName();
System.out.println("GetName:"+filePath);
System.out.println("FieldName"+fm.getFieldName());
String fileName = "";
String fileKind = "";
//int start = filePath.lastIndexOf("\\");
int kind = filePath.lastIndexOf(".");
if(kind!=-1)
{
fileKind = filePath.substring(kind);
System.out.println("file name is :"+fileKind);
}
if(fm.getSize()>maxSize)
{
message = "too big";
break;
}
if(fileName.equals("")&&fm.getSize()==0)
{
break;
}
fileName = "bc"+fileKind;
File saveFile = new File(path,fileName);
fm.write(saveFile);
System.out.println("ok to upload"+fileName);
}
}
}
}catch(Exception e)
{
e.printStackTrace();
}
注意了以上幾點的話,應該您就不會再遇到操作上的問題了。