上传文件:
1. 上传对表单限制
* method="post"
* enctype="multipart/form-data"
* 表单中需要添加文件表单项:<input type="file" name="xxx" />
<form action="xxx" method="post" enctype="multipart/form-data">
用户名;<input type="text" name="username"/><br/>
文 件:<input type="file" name="filename"/><br/>
<input type="submit" value="上传"/>
</form>
2. 上传对Servlet限制
* request.getParametere("xxx");这个方法在表单为enctype="multipart/form-data"时,它作废了。它永远都返回null
* ServletInputStream request.getInputStream();包含整个请求的体!
upload.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Upload3Servlet" enctype="multipart/form-data" method="post">
用户名:<input type="text" name="username" ><br/>
文 件:<input type="file" name="filename" ><br/>
<input type="submit" value="上传" ><br/>
</form>
</body>
</html>
UploadServlet代码:
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/**
* 1.创建工厂
* 2.创建解析器
* 3.解析request请求
* 获取 FileItem
*/
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload sf = new ServletFileUpload(diskFileItemFactory);
sf.setHeaderEncoding("utf-8"); // 设置请求编码
try {
List<FileItem> list = sf.parseRequest(request);
FileItem fileItem = list.get(1);
System.out.println("name="+fileItem.getFieldName());
// 文件路径
String filename = fileItem.getName();
System.out.println("url="+filename);
// 获取文件名称
if(filename.lastIndexOf("\\")!=-1){ // 文件路径可能包含F:\AA\BB\美女.jpg
filename=filename.substring(filename.lastIndexOf("\\")+1);
}
// 获取根目录
ServletContext application = this.getServletContext();
String path = application.getRealPath("/WEB-INF/files");
// 设置不重名的文件名
String uuid = UUID.randomUUID().toString().replace("-", "");
String savename=uuid+"_"+filename;
// 分层设置目录
String hs = Integer.toHexString(filename.hashCode());
File saveurl= new File(path, hs.charAt(0)+"/"+hs.charAt(1));
//创建多个文件夹 如果有就不创建 如果没有就创建
saveurl.mkdirs();
System.out.println("保存路径"+saveurl.toString());
// 设置保存地址
File file = new File(saveurl,savename);
// 写入保存地址
fileItem.write(file);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}