首先写一个简单的jsp页面,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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="uploadServlet" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
<input type="file" name="pic"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
效果如图:
接下来是实现uploadservlet中的内容:
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//上传文件
//1.创建文件工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
//2.创建文件的核心类
ServletFileUpload servletFileUpload=new ServletFileUpload(factory);
servletFileUpload.setSizeMax(1024*1024);//设置整个form表单的大小
servletFileUpload.setFileSizeMax(1024*1024*1024);//设置单个上传文件的大小
//3.判断当前的request是否是文件上传的request格式
if(servletFileUpload.isMultipartContent(request)) {
//4.如果是,就解析当前的request为文件上传的request
List<FileItem> list=servletFileUpload.parseRequest(request);
//5.遍历list集合。处理fileItem
for (FileItem fileItem : list) {
//6.判断当前的fileItem是否为普通的表单域
if (fileItem.isFormField()) {
//是的话
String filedName=fileItem.getFieldName();//获取表单域的name属性值
//String value=fileItem.getString(); 使用这个获取value,当value值中有中文时,会出现乱码
String value=fileItem.getString("UTF-8");//这个就不会乱码
System.out.println(filedName+"----"+value);
}else {
//7.不是普通表单域,就是文件域
String fieldName=fileItem.getFieldName();
String name=fileItem.getName();//获取上传文件的名字
//解决文件重名问题,随机数+标识符+真实文件名
name= UUID.randomUUID().toString().replaceAll("-", "")+"+"+name;
//8.将文件传到指定的地方
/* request.getServletContext().getRealPath("/upload") 获取upload.jsp在Tomcat中当前工程下的绝对路径,
这样即便项目打包放在别的系统上,也不会出错,因为总会有Tomcat目录*/
/* String realPath=request.getServletContext().getRealPath("/upload");*/
String realPath="D:/File";//通过虚拟路径传输
File file=new java.io.File(realPath);
if (! file.exists()) {//看看upload.jsp所在的目录是否存在,不存在就新建一个目录
file.mkdir();
}
fileItem.write(new File(file, name));
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
代码中重要的是这一点:
这个时候还有最重要的配置,我是在eclipse中运行的,在:
打开文件夹底下的server.xml
有些文章说是在Tomcat的包路径下的conf里找到这个server.xml然后修改,其实不是的,应该是在这里面修改。修改内容在其中的host标签下修改:
传输成功:
服务器想要访问保存的图片的话,就输入:
访问结果: