Servlet提交form表单(文件上传)

第一步:书写测试html,其中enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

<textarea readonly="readonly" name="code" class="html">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="upload" Enctype="multipart/form-data">
姓名:<input type="text" name="name"/><br/><br/>
年龄:<input type="text" name="age"/><br/><br/>
上传  <input type="file" name="file"/><br/><br/>    
<input type="submit" value="提交"/>  
<input type="reset" value="重置"/>
</form>
</body>
</html>
</textarea>
 

第二步:配置<servlet></servlet>,其中<multipart-config>中配置上传文件的参数

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>HST</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>ServletTest</servlet-name>
		<servlet-class>com.hts.servlet.ServletTest</servlet-class>
		<multipart-config>
			<max-file-size>51200</max-file-size>
			<max-request-size>52224</max-request-size>
			<file-size-threshold>4096</file-size-threshold>
		</multipart-config>
	</servlet>
	<servlet-mapping>
		<servlet-name>ServletTest</servlet-name>
		<url-pattern>/upload</url-pattern>
	</servlet-mapping>
</web-app>

第三步:书写测试类

1.创建一个测试类,并继承HttpServlet类,重写弗雷中的doPost方法

@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		String name = req.getParameter("name");
		String age = req.getParameter("age");
		resp.getWriter().write("name:" + name + "<br/>" + "age:" + age);
		Part part = req.getPart("file");
		upSave(part);
		resp.getWriter().write("<strong>上传成功!</Strong>");
	}


2.写一个解析上传文件头部的方法,获得文件名称,并返回

private String getFileName(Part part) {
		String header = part.getHeader("content-disposition");
		String[] headerNames = header.split("filename=");
		return headerNames[headerNames.length - 1].replaceAll("\"", "");
	}

3.写一个保存上传文档的方法,通过输入输出流完成上传文件

	private void upSave(Part part) throws IOException {
		String fileName = getFileName(part);
		fileName = "hst" + System.nanoTime() + fileName;
		ServletContext servletContext = getServletContext();
		String path = servletContext.getRealPath("/");
		File file = new File(path + "upload");
		if (!file.exists()) {
			file.mkdirs();
		}
		File newFile = new File(file, fileName);
		FileOutputStream fos = null;
		InputStream fip = null;
		byte[] buf = new byte[1024];
		int flag = 0;
		try {
			fos = new FileOutputStream(newFile);
			fip=part.getInputStream();
			while ((flag=fip.read(buf, 0, 1024))!=-1) {
				fos.write(buf, 0, flag);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (fos!=null) {
				fos.close();
			}
			if (fip!=null) {
				fip.close();
			}
		}
	}

测试类整体代码

package com.hts.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

public class ServletTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		String name = req.getParameter("name");
		String age = req.getParameter("age");
		resp.getWriter().write("name:" + name + "<br/>" + "age:" + age);
		Part part = req.getPart("file");
		upSave(part);
		resp.getWriter().write("<strong>上传成功!</Strong>");
	}

	private void upSave(Part part) throws IOException {
		String fileName = getFileName(part);
		fileName = "hst" + System.nanoTime() + fileName;
		ServletContext servletContext = getServletContext();
		String path = servletContext.getRealPath("/");
		File file = new File(path + "upload");
		if (!file.exists()) {
			file.mkdirs();
		}
		File newFile = new File(file, fileName);
		FileOutputStream fos = null;
		InputStream fip = null;
		byte[] buf = new byte[1024];
		int flag = 0;
		try {
			fos = new FileOutputStream(newFile);
			fip=part.getInputStream();
			while ((flag=fip.read(buf, 0, 1024))!=-1) {
				fos.write(buf, 0, flag);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (fos!=null) {
				fos.close();
			}
			if (fip!=null) {
				fip.close();
			}
		}
	}

	private String getFileName(Part part) {
		String header = part.getHeader("content-disposition");
		String[] headerNames = header.split("filename=");
		return headerNames[headerNames.length - 1].replaceAll("\"", "");
	}

}

猜你喜欢

转载自blog.csdn.net/qq_35308803/article/details/79930756