关闭

Servlet文件上传||@MultipartConfig标注属性

标签: servlet下载上传文件webdownload存储
5967人阅读 评论(2) 收藏 举报
分类:
在Servlet3.0之前,处理上传文件的操作一直是让开发者头疼的问题,因为Servlet本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。
Servlet3.0提供了对文件上传的支持,通过@MultipartConfig标注和HttpServletRequest的两个新方法getPart()和getParts(),开发者能够很容易实现文件的上传操作。

@MultipartConfig标注主要是为了辅助Servlet3.0中HttpServletRequest提供的对上传文件的支持。该标注写在Servlet类的声明之前,一表示该Servlet希望处理的请求时multipart/form-data类型的。另外,该标注还提供了若干属性用于简化对上传文件的处理。

@MultipartConfig标注属性

fileSizeThershold         int型      是(可选)     描述:当前数据量大于该值时,内容将被写入文件。

location               String型           是(可选)     描述:存放生成文件的地址

maxFileSize        long型             是(可选)     描述:允许上传的文件最大值,默认为-1,表示没有限制

maxRequestSize    long型         是(可选)     描述:针对 multipart/form-data 请求的最大数量,默认为-1,表示没有限制

<!--index.html文件部分代码-->
<form action="/HelloWorld/UpLoad" method="post" enctype="multipart/form-data">
	<input type="file" name="file">
	<input type="submit" name="upload" value="上传">
</form>

/*UpLoad.java为上传文件的Servlet类*/
package javaee.servlet;
import …………
//设置访问活着调用这个Servlet的路径
@WebServlet("/UpLoad")
//说明该Servlet处理的是multipart/form-data类型的请求
@MultipartConfig
public class UpLoad extends HttpServlet{
	private static final long serialVersionUID = 1L;
	public UpLoad(){
		super();
	}
	protected void doGet(HttpServletRequest request,HttpServletResponse response)
		throws ServletException,IOException{
		this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		//说明输入的请求信息采用UTF-8编码方式
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		//Servlet3.0中新引入的方法,用来处理multipart/form-data类型编码的表单
		Part part = request.getPart("file");
		//获取HTTP头信息headerInfo=(form-data; name="file" filename="文件名")
		String headerInfo = part.getHeader("content-disposition");
		//从HTTP头信息中获取文件名fileName=(文件名)
		String fileName = headerInfo.substring(headerInfo.lastIndexOf("=") + 2, headerInfo.length() - 1);
		//获得存储上传文件的文件夹路径
		String fileSavingFolder = this.getServletContext().getRealPath("/UpLoad");
		//获得存储上传文件的完整路径(文件夹路径+文件名)
		//文件夹位置固定,文件夹采用与上传文件的原始名字相同
		String fileSavingPath = fileSavingFolder + File.separator + fileName;
		//如果存储上传文件的文件夹不存在,则创建文件夹
		File f = new File(fileSavingFolder + File.separator);
		if(!f.exists()){
			f.mkdirs();
		}
		//将上传的文件内容写入服务器文件中
		part.write(fileSavingPath);
		//输出上传成功信息
		out.println("文件上传成功~!");
	}
}

/DownLoadjava为下载文件的Servlet类*/
package javaee.servlet;
import …………
@WebServlet("/DownLoad")
public class DownLoad extends HttpServlet{
	private static final long serialVersionUID = 1L;
	public DownLoad(){
		super();
	}
	protected void doGet(HttpServletRequest request ,HttpServletResponse response)
			throws ServletException,IOException{
		this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException,IOException{
		try{
			//服务器相对路径
			String filepath = "WEB-INF/web.xml";
			//服务器绝对路径
			String fullFilePath = getServletContext().getRealPath(filepath);
			System.out.println(fullFilePath);
			/*打开文件,创建File类型的文件对象*/
			File file = new File(fullFilePath);
			/*如果文件存在*/
			if(file.exists()){
				System.out.println("文件存在");
				/*获得文件名,并采用UTF-8编码方式进行编码,以解决中文问题*/
				String filename = URLEncoder.encode(file.getName(), "UTF-8");
				System.out.println(filename);
				/*重置response对象*/
				response.reset();
				//设置文件的类型,xml文件采用text/xml类型,详见MIME类型的说明
				response.setContentType("text/xml");
				//设置HTTP头信息中内容
				response.addHeader("Content-Disposition","attachment:filename=\"" + filename + "\"" );
				//设置文件的长度
				int fileLength = (int)file.length();
				System.out.println(fileLength);
				response.setContentLength(fileLength);
				/*如果文件长度大于0*/
				if(fileLength!=0){
					//创建输入流
					InputStream inStream = new FileInputStream(file);
					byte[] buf = new byte[4096];
					//创建输出流
					ServletOutputStream servletOS = response.getOutputStream();
					int readLength;
					//读取文件内容并写到response的输出流当中
					while(((readLength = inStream.read(buf))!=-1)){
						servletOS.write(buf, 0, readLength);
					}
					//关闭输入流
					inStream.close();
					//刷新输出缓冲
					servletOS.flush();
					//关闭输出流
					servletOS.close();
				}
			}else {
				System.out.println("文件不存在~!");
				PrintWriter out = response.getWriter();
				out.println("文件 \"" + fullFilePath + "\" 不存在");
			}
		}catch(Exception e){
			System.out.println(e);
		}
	}
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Servlet3的上传配置@MultipartConfig

@MultipartConfig 该注解主要是为了辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持。该注解标注在 Servlet 上面,以表示该 Ser...
  • chenqipc
  • chenqipc
  • 2016-01-20 23:09
  • 6770

Servlet-文件上传@MultipartConfig,Part

Servlet-文件上传@MultipartConfig,Part sf2gis@163.com 2015年9月18日   1 目标:后台获取客户端上传文件内容并保存。 2 原理:前端使用文...
  • sf2gis2
  • sf2gis2
  • 2015-09-18 15:54
  • 2162

Spring MVC 4使用Servlet 3 MultiPartConfigElement实现文件上传(带源码)

【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】 【翻译 by 明明如月 QQ 605283073】 原文地址:http://websys...
  • w605283073
  • w605283073
  • 2016-05-08 01:27
  • 8379

Servlet & Spring对Multipart数据请求的支持

参考资料: (1)RFC 1867 (2)Java Servlet Specification 3.1; (3)《Java Web高级编程》;1. Multipart FormDataMulti...
  • Zerohuan
  • Zerohuan
  • 2016-01-13 16:50
  • 1846

Servlet3.1下@MultipartConfig注解方式上传文件

Servlet3.0下@MultipartConfig注解方式上传文件 Servlet3.0之前上传文件通常借助commons-fileupload-xxx.jar和commons-io-xxx.ja...
  • mytt_10566
  • mytt_10566
  • 2017-05-04 09:35
  • 1688

解决使用Spring Boot、Multipartfile上传文件路径错误问题

彻底跟路径错误say拜拜! 题图:from Google 1.问题描述 关键字: SpringMVC 4.2.4 、 Spring Boot 1.3.1 、Servlet 3.0 、...
  • daniel7443
  • daniel7443
  • 2016-06-09 12:48
  • 33581

Servlet3.1下@MultipartConfig注解方式上传文件

Servlet3.0下@MultipartConfig注解方式上传文件 Servlet3.0之前上传文件通常借助commons-fileupload-xxx.jar和commons-io-xxx.ja...
  • mytt_10566
  • mytt_10566
  • 2017-05-04 09:35
  • 1688

SpringMVC + servlet3.0 文件上传的配置和实现

简单几步,实现SpringMVC+servlet3.0文件上传功能: 第一步:配置web.xml文件中的servlet,添加multipart-config: myWeb ...
  • ClementAD
  • ClementAD
  • 2015-10-31 15:20
  • 4650

Spring Boot 配置文件 - 属性大全

为方便自己查找配置属性,因为打开Spring Boot官网实在是太慢了。 # ============================================================...
  • Veechange
  • Veechange
  • 2016-10-14 17:29
  • 4743

@MultipartConfig,Servlet3.0通过Part进行文件上传

@MultipartConfig 使用注解@MultipartConfig 将一个 Servlet 标识为支持文件上传。Servlet3.0 将multipart/form-data 的 POST 请...
  • icecoola_
  • icecoola_
  • 2017-08-04 19:50
  • 252
    个人资料
    • 访问:272885次
    • 积分:3786
    • 等级:
    • 排名:第9816名
    • 原创:327篇
    • 转载:17篇
    • 译文:10篇
    • 评论:34条
    博客专栏
    最新评论