基于Servlet的文件上传功能

使用Servlet的文件上传需导入两个.jar包:

commons-fileupload-1.3.3.jar

commons-io-2.4.jar

web.xml配置文件如下:

<?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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>UploadAndDown</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>UploadServlet</display-name>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>org.student.servlet.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
  </servlet-mapping>
</web-app>
//index.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="sno"/><br>
		姓名:<input type="text" name="sname"/><br>
		上传照片: <input type="file" name="spicture"/>
		<br>
		<input type="submit" value="提交"/>	
	</form>
</body>
</html>
//servlet
package org.student.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public UploadServlet() {
		super();
	}

	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");
		// 上传
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);

		// 通过parseRequest解析form中的所有字段,并保存到items集合中
		try {
			if (isMultipart) {// 判断前台的form是否有multuipart/form-data字段
				FileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upload = new ServletFileUpload(factory);

				List<FileItem> items = upload.parseRequest(request);

				// 遍历items中的字段
				Iterator<FileItem> ite = items.iterator();
				while (ite.hasNext()) {
					FileItem item = ite.next();
					String itemName = item.getFieldName();
					int sno = -1;
					String name = null;
					// 判断前台字段是普通form表单字段(sno sname), 还是文件字段

					// request.getParameter() -- iter.getString()
					if (item.isFormField()) {
						if (itemName.equals("sno")) {// 根据name属性判断item是sno,sname还是spicture
							sno = Integer.parseInt(item.getString("UTF-8"));
						} else if (itemName.equals("sname")) {
							name = item.getString("UTF-8");
						} else {
							System.out.println("其他字段...");
						}
					} else {// spicture
							// 文件上传

						// 文件名
						String fileName = item.getName();

						// 获取文件内容,并上传
						// 定义文件路径:指定上传的位置(服务器路径)
						// 获取服务器路径
//						String path = request.getSession().getServletContext().getRealPath("upload");
						String path = "D:\\workspace for j2ee\\UploadAndDown\\upload";
						File file = new File(path, fileName);
						item.write(file);
						
						System.out.println("上传成功...");
						return ;
					}
				}

			}
		} catch (Exception e) {

			e.printStackTrace();
		}
	}

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

		doGet(request, response);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41700374/article/details/84895081
今日推荐