day05 --文件上传

form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<!-- 客户端三个要求:
		1.form的method为post
		2.type=file,且有name值
		3.enctype="multipart/form-data"
	 -->
	<form action="/WEB32_upload/fileuploadServlet2" method="post" enctype="multipart/form-data">
		<input type="text" name="username"/>
		<input type="file" name="filename" />
		<input type="submit" value="上传文件"/>
	</form>
	
	<!-- 服务器端怎样获得上传的文件?
	1.通过request获得请求体的内容
	2.解析请求体:
		根据分隔符将请求体的文本内容分割成数组,数组中的每一个部分是一个表单项
	3.遍历数组,分清楚哪个是普通的表单项,哪个是文件上传项
	4.普通表单项:username=zhangsan
	5.文件上传项:
		filename="aaa.txt"
		文件的内容
		使用io将文件的内容以文件名存到服务器上 -->
	
</body>
</html>

FileuploadServlet

public class FileuploadServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		try {
			//接收上传文件
			
			//1.创建磁盘文件项工厂
			DiskFileItemFactory factory = new DiskFileItemFactory();
			
			//2.创建文件上传的核心类
			ServletFileUpload upload = new ServletFileUpload(factory);
			
			
			//3.解析request--获得文件项集合
			List<FileItem> parseRequest = upload.parseRequest(request);
			
			//4.遍历文件项集合
			for(FileItem item : parseRequest){
				//5.判断普通表单项/文件上传项
				//是否是一个普通表单项
				boolean formField = item.isFormField();
				if(formField){
					//普通表单项
					//name="username"
					String fieldName = item.getFieldName(); 
					//value="zhangsan"
					String fieldValue = item.getString();
					System.out.println(fieldName+":"+fieldValue);
				}else{
					//文件上传项
					//获得上传文件的名称
					String fileName = item.getName();
					//获得上传文件的内容
					InputStream in = item.getInputStream();
					//将in中的数据拷贝到服务器上
					String path = this.getServletContext().getRealPath("upload");
					OutputStream out = new FileOutputStream(path+"/"+fileName);
					int len = 0;
					byte[] buffer = new byte[1024];
					while((len=in.read(buffer))>0){
						out.write(buffer, 0, len);
					}
					
					in.close();
					out.close();
					
				}
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

FileuploadServlet2

public class FileuploadServlet2 extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@SuppressWarnings("resource")
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		//1.创建磁盘文件项工厂
		//作用:1.设置临时文件大小 2.设置临时文件存储位置
		String path_temp = this.getServletContext().getRealPath("temp");
		DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024,new File(path_temp));
		//或者使用set方法设置大小和位置
//		factory.setSizeThreshold(1024*1024);
//		factory.setRepository(new File(path));
		
		//2.创建文件上传的核心类
		ServletFileUpload upload = new ServletFileUpload(factory);
		
		//设置上传文件的名称的编码
		upload.setHeaderEncoding("UTF-8");
		
		//ServletFileUpload的API
		boolean multipartContent = upload.isMultipartContent(request); //判断表单是否是文件上传的表单
		if(multipartContent){
			//是文件上传的表单
			//***解析request获得文件项集合
			try {
				List<FileItem> parseRequest = upload.parseRequest(request);
				if(parseRequest!=null){
					for(FileItem item : parseRequest){
						//判断是不是是一个普通表单项
						if(item.isFormField()){
							//是普通表单项
							//username=zhangsan
							String fieldName = item.getFieldName();
							String fieldValue = item.getString("UTF-8");//对普通表单项的内容进行编码
							
							System.out.println(fieldName+":"+fieldValue);
							//当表单是enctype="multipart/form-data"时,request.getParameter相关的方法都失效
							//String parameter = request.getParameter("username");
							
						}else{
							//是文件上传项
							//文件名
							String fileName = item.getName();
							//获得上传文件的内容
							InputStream in = item.getInputStream();
							String path = this.getServletContext().getRealPath("upload");
							OutputStream out = new FileOutputStream(new File(path+"/"+fileName));
						
							IOUtils.copy(in, out);
							in.close();
							out.close();
							
							//删除临时文件
							item.delete();
						}
					}
				}
			} catch (FileUploadException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}else{
			//不是文件上传的表单
			//使用原始的表单数据的获得方式 request.getParameter("");
		}
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

  

  

猜你喜欢

转载自www.cnblogs.com/syj1993/p/9853435.html