用到的jar包:
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang-2.4.jar
jsp 页面编码:
<form action="UploadFileServlet" enctype="multipart/form-data" method="post">
<input type="text" name="name" value="张三"/>
<input type="text" name="title" value="标题"/>
<input type="file" name="file" />
<button type="submit">提交</button>
</form>
servlet编码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置收发请求的编码:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String path=request.getContextPath(); //'/weblibo'
String basePath=request.getScheme()+"://"+request.getServerName()+"/"+request.getServerPort()+path+"/";
String name,title,file;
//设置文件的临时目录:
File tempPath=new File("d:/admin/temp");
if(!tempPath.exists()){
tempPath.mkdirs();
}
//文件的真实目录
String realPath =this.getServletContext().getRealPath("upload"); //项目里必须要有upload文件夹。
System.out.println(realPath);
//isMultipartContent方法方法用于判断请求消息中的内容是否是“multipart/form-data”类型
if(ServletFileUpload.isMultipartContent(request)){
//采用参数指定临界值和系统临时文件夹构造文件项工厂对象。
FileItemFactory factory = new DiskFileItemFactory(5000, tempPath);
//使用提供的工厂构造FileItem instances
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
try {
//解析表单字段
List<FileItem> items=servletFileUpload.parseRequest(request);
for(FileItem item:items){
//判断是否是普通表单字段
if(item.isFormField()){
String inputName=item.getFieldName();
if(inputName.equals("name")){
name=item.getString("utf-8");
}else if(inputName.equals("title")){
title=item.getString("utf-8");
}else if(inputName.equals("file")){
file=item.getString("utf-8");
}
}else {
//文件表单字段
String fileName=item.getName();
// 2.规定文件的格式和大小
long size = 1024 * 1024 * 1024;
long fileSize=item.getSize();
//文件大了
if(size<fileSize){
response.getWriter().print("<script>alert('文件过大!')</script>");
}else{
//文件合适
item.write(new File(realPath + "/" + fileName));
request.setAttribute("message", "你好");
request.getRequestDispatcher("admin/myjsp.jsp").forward(request, response);
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
PrintWriter out = response.getWriter();
out.println("</HTML>");
out.flush();
out.close();
}
web.xml编码:
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UploadFileServlet</servlet-name>
<servlet-class>servlet.UploadFileServlet</servlet-class> //包名.servlet
</servlet>
<servlet-mapping>
<servlet-name>UploadFileServlet</servlet-name>
<url-pattern>/UploadFileServlet</url-pattern> //这个地方直接写“/servlet名”,不加包名。
</servlet-mapping>