Tomcat中通过虚拟路径存储图片及其案例

首先写一个简单的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标签下修改:



传输成功:


服务器想要访问保存的图片的话,就输入:

访问结果:


猜你喜欢

转载自blog.csdn.net/loveliness_peri/article/details/81054994
今日推荐