fileupload的使用----笔记

在request可以直接得到输入流从而处理上传文件的数据内容,但是很麻烦因为还有post报文的其他内容存在,还得手动区分哪些是文件数据,哪些是表单的其他数据。所以直接使用commons-fileupload组件,处理文件上传。

commons-fileupload依赖于commons-io组件。
下好包导入到WEB-INF/lib下

上demo代码

  1. jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<div style="color:red;">
		${sessionScope.message}
	
	</div>

	<form action="<%=request.getContextPath() %>/fileup" method="post" enctype="multipart/form-data">
		<input type="file" name="file" />
		<input type="submit" name="submit"  value="上传"/>
	</form>


</body>
</html>
  1. servlet
package top.demo.up;

import java.io.IOException;
import java.io.InputStream;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import java.io.File;
import java.io.FileOutputStream;

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

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 创建 FileItem工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();

		// Set factory constraints
		//设置文件在内存中最大的大小 字节为单位
		factory.setSizeThreshold(1024*1024*20);
		//设置超过最大内存大小后 转储的硬盘目录
		File file=new File("F:/uptemp");
		if(!file.exists())
		{
			file.mkdir();
		}
		factory.setRepository(file);

		// 创建servlet文件上传对象
		ServletFileUpload upload = new ServletFileUpload(factory);

		// 设置文件上传最大的总大小 (不是单个文件的大小)
		upload.setSizeMax(1024*1024*1024);
		
		//文件上传临时缓冲
		byte buf[] =new byte[1024*1024*20];
		int len=0;

		// 解析请求
		try {
			List<FileItem> items = upload.parseRequest(request);
			
			for(FileItem item:items) {
				
				if(item.isFormField()) {
					//文本域
					String name=item.getFieldName();
					String value=item.toString();
					System.out.println("isFormField"+name+"----"+value);
					
				}else {
					//文件
					long fileSize=item.getSize();
					String fileName=item.getName();
					String fileFullHttpType=item.getContentType();
					String upFileName = null;
					if(fileName.indexOf("\\")!=-1) {
						int last=fileName.lastIndexOf("\\");
						upFileName=file.toString()+File.separatorChar+fileName.substring(last+1);
					}else {
						upFileName=file.toString()+File.separatorChar+fileName;
					}
									
					System.out.println("上传目录----"+upFileName);
					InputStream in=item.getInputStream();
					FileOutputStream out=new FileOutputStream(upFileName);
					len=0;
					
					
					if(out!=null)
					{
						while(-1!=(len=in.read(buf,0,1024*1024*19))) {
							
							out.write(buf, 0, len);
							out.flush();
						}
						if(out!=null)
							out.close();
						if(in!=null)
							in.close();
					}else {
						request.getSession().setAttribute("message", "创建输出流出错");
						response.sendRedirect(request.getContextPath()+"/up/fileup.jsp");
					}
					
				}
				
			}
		
			
		} catch (FileUploadException e) {
			e.printStackTrace();
			System.out.println("文件上传出错");
			request.getSession().setAttribute("message", "文件上传出错");
			response.sendRedirect(request.getContextPath()+"/up/fileup.jsp");
		}
		
		request.getSession().setAttribute("message", "上传文件成功");
		System.out.println("文件上传成功");
		response.sendRedirect(request.getContextPath()+"/up/fileup.jsp");

	
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值