网络上关于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();
}
注意了以上几点的话,应该您就不会再遇到操作上的问题了。