Servlet submit form form (file upload)

Step 1: Write test html where the enctype attribute specifies how the form data should be encoded before being sent to the server.

<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>
 

Step 2: Configure <servlet></servlet>, where the parameters of the uploaded file are configured in <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>

Step 3: Write the test class

1. Create a test class, inherit the HttpServlet class, and override the doPost method in Frey

@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>Upload successful!</Strong>");
	}


2. Write a method to parse the header of the uploaded file, get the file name, and return

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

3. Write a method to save uploaded documents and upload files through input and output streams

	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();
			}
		}
	}

Test class overall code

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>Upload successful!</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("\"", "");
	}

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324412111&siteId=291194637