Java Web 学习笔记之一:服务器获取表单上传的文件

Servlet3.0标准之后,Java Web文件上传就不需要通过FileUpload等库来实现了,通过servlet API即可实现web后台的文件上传支持。

表单提交请求,表单中的文件可以通过request.getPart()方法获取。

下面来介绍获取文件的具体使用方法:

(1)在servlet类上添加AMultipartConfig注解

(2)通过HttpServletRequestgetPart()方法或getParts()方法获取Part对象

(3)通过操作Part对象对获取的文件进行操作

注意:

添加@MultipartConfig注解之后,entype=”multipart/form-data”的表单类型也可以通过request.getParameter()方法来获取和文件一起提交的普通字串参数。如果没有@MultipartConfig注解,getParameter()方法只能处理enctype=”application/x-www-form-urlencoded”的表单类型。

放上例程以及注释:

1.servlet例程,getpart方法在doPost方法中使用

package com.johnson.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import com.johnson.tools.UploadUtil;


/**
 * created by johnson on 2016/5/11
 * @author johnson
 * @version 1.0
 * @description 尝试文件上传功能的servlet,需要通过jsp/html或者移动设备的表单格式发送post请求
 * @attention 通过getpart获取文件的方法需要servlet3.0以上支持
 * @attention 添加@MultipartConfig注解之后,multipart/form-data类型的表单也可以通过request的getparameter方法获取数据
 * */

@MultipartConfig
public class FileUploadTestServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public String baseFileSavePath = null;//文件保存的基础路径(自定义)

	/**
	 * method init
	 * @throws ServletException 
	 * */
	public void init(ServletConfig config) 
			throws ServletException{
		super.init(config);
		this.baseFileSavePath = this.getServletContext().getInitParameter("BaseFilePath");//从web.xml排位置文件中获取基础路径
	}

	/*
	 * @method doPost
	 * @description 在doPost方法中使用getPart方法获取请求上传的文件
	 * */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException{
		request.getSession();
		try{
			Part part0 = request.getPart("file0");//获取名称为file0的文件
			part0.write(this.baseFileSavePath+UploadUtil.getFileName(part0));//用Part的write方法将文件写入磁盘中
		}catch(IOException e){
			e.printStackTrace();
		}
		try{
			Part part1 = request.getPart("file1");//获取名称为file1的文件
			part1.write(this.baseFileSavePath+UploadUtil.getFileName(part1));//用Part的write方法将文件写入磁盘中
		}catch(IOException e){
			e.printStackTrace();
		}
		response.getWriter().write("OK!");
		
	}
	

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

2.另外一个类用来从获取的Part对象中获取相应的文件属性等

package com.johnson.tools;

/** 
 * 此工具类只适用于Servlet 3.0 
 */  
import javax.servlet.http.*;  
public class UploadUtil{  
		
		//获取文件类型返回一个类似于".XXX"的字串
       	public static String getFileType(Part p){  
       		String name = p.getHeader("content-disposition");  
       		String fileNameTmp = name.substring(name.indexOf("filename=")+10);//截取字串获取文件名
       		String type = fileNameTmp.substring(fileNameTmp.indexOf(".")+1,fileNameTmp.indexOf("\""));//截取文件名获取文件后缀名(类型)
       		return type;  
       	}  
       	
       	//获取文件名返回一个类似于"XXX.XXX"的完整文件名,包括了后缀
       	public static String getFileName(Part p){  
       		String name = p.getHeader("content-disposition");  
       		String fileNameTmp = name.substring(name.indexOf("filename=")+10);  
       		String fileName = fileNameTmp.substring(0,fileNameTmp.indexOf("\""));  
       		return fileName;  
       	}  
}  





你可能感兴趣的:(Java,Web,servlet3.0,getpart,Java,Web,上传文件,表单上传文件)