Servlet上传文件到指定路径-Form提交

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhouhaisunny/article/details/83060676

我们使用开源项目Commons FileUpload最常用ServletFileUpload上传

项目结构:

pom.xml

这里就是用到了javax.servlet-api-3.0.1.jar、commons-fileupload-1.3.2.jar、commons-io-2.2.jar

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.citywy</groupId>
  <artifactId>upload-03</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>3.0.1</version>
	    <scope>provided</scope>
	</dependency>
	<dependency>
	    <groupId>commons-fileupload</groupId>
	    <artifactId>commons-fileupload</artifactId>
	    <version>1.3.2</version>
	</dependency>
  </dependencies>
  <build>
    <finalName>upload-03</finalName>
  </build>
</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"   
    xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <description></description>
    <display-name>Upload01</display-name>
    <servlet-name>Upload01</servlet-name>
    <servlet-class>com.citywy.servlet.Upload01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Upload01</servlet-name>
    <url-pattern>/upload01</url-pattern>
  </servlet-mapping>
</web-app>

Upload01.java 
 

package com.citywy.servlet;

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

import javax.servlet.ServletContext;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

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

    public Upload01() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//Check that we have a file upload request 检查是否有文件上传请求
		boolean isMultipart=ServletFileUpload.isMultipartContent(request);
		if(isMultipart){
			// Create a factory for disk-based file items 创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
			DiskFileItemFactory factory=new DiskFileItemFactory();
			//System.out.println(System.getProperty("java.io.tmpdir"));//默认临时文件夹
			// Set factory constraints
			/*factory.setSizeThreshold(yourMaxMemorySize);
			factory.setRepository(yourTempDirectory);*/
			
			//Create a new file upload handler创建ServletFileUpload对象,并设置上传文件的大小限制
			ServletFileUpload upload=new ServletFileUpload(factory);
			upload.setSizeMax(10 * 1024 * 1024);// 以byte为单位 不能超过10M 1024byte
			
			// Set overall request size constraint
//			upload.setSizeMax(yourMaxRequestSize);
			
			// Parse the request 调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象
			try {
				List<FileItem> items = upload.parseRequest(request);
				// Process the uploaded items
				Iterator<FileItem> iter=items.iterator();
				while(iter.hasNext()){
					FileItem item=iter.next();
					//遍历list,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件
					if(item.isFormField()==true){// 普通表单元素
						String name=item.getFieldName();// name属性值
						String value=item.getString();// name对应的value值
						System.out.println("form field:"+name+"--"+value);
					}else{
						String fieldName = item.getFieldName();
					    String fileName = item.getName();// 文件名称
					    String contentType = item.getContentType();
					    boolean isInMemory = item.isInMemory();
					    long sizeInBytes = item.getSize();
					    System.out.println("file upload:"+fieldName+"--"+fileName+"--"+contentType+"--"+isInMemory+"--"+sizeInBytes);
					}
					
					// Process a file upload
					if(!item.isFormField()){
						//1.获取真实地址,这里保存在Tomcat运行的项目upload目录中,这要在src/main/webapp下新建upload文件夹
						/*ServletContext sctx = getServletContext(); 
						String path=sctx.getRealPath("/upload");
						String fileName = item.getName();
						File uploadedFile=new File(path+"\\"+fileName);
						item.write(uploadedFile);*/
						
						//2.保存到指定盘符
						String fileName=item.getName();
						File uploadedFile=new File("d:/tmp/"+fileName);
						item.write(uploadedFile);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
	}

}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'upload.jsp' starting page</title> 
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="This is my page"> 
<!--
<link rel="stylesheet" type="text/css" href="styles.css"> 
-->
</head>
<body>
	<form action="/upload-03/upload01" method="post" enctype="multipart/form-data"> 
		请选择上传的图片或文件:
		<!-- 这个是item.isFormField()==false -->
		<input type="file" name="fileName"/>
		<!-- 这个走的就是item.isFormField()==true -->
		<input type="text" name="hello" value="taray">
		<input type="submit" value="上传"/>
	</form>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/zhouhaisunny/article/details/83060676
今日推荐