Servlet上传

1.Servlet3.0

没有直接获取上传文件名的方法,需要自已创建

public class UploadUtils {
	private HttpServletRequest request;
	private HttpServletResponse response;
	private Part part;
	private List<Part> partlist;
    public UploadUtils(HttpServletRequest request, HttpServletResponse response){
    	this.request=request;
    	this.response=response;
    }
    
    //Servlet3.0的处理   手动写获取文件名的方法
    public String getSubmitFileName(String name){
    	String filename=null;
        try {
			part = request.getPart(name); //得到上传字段的name属性
		} catch (IOException | ServletException e) {
			e.printStackTrace();
		}
		String head = part.getHeader("Content-Disposition");
     		// 截取名字,或者以=分割都可以
			// 取到的时第一个f的索引
			if (head.lastIndexOf("filename")>-1) { //如果是文件的话
				 filename = head.substring(head.lastIndexOf("filename=") + 10,
						head.length() - 1);
				return filename;
			}
		return filename;
    }
    //单文件上传
    public void  upload(String storeFolder,String fileName) throws ServletException, IOException {
		// 指定上传的绝对路径
		String Dir = request.getServletContext().getRealPath(storeFolder); //WEB-INF/uploads
		File Dirfile = new File(Dir);
		if (!Dirfile.exists()) { //必须要判断
			Dirfile.mkdirs();
		}
		// 开始上传
		try {
			if (fileName.length()>0) {
				part.write(Dir + File.separator + fileName);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
    }
    
    
    
  //获取文件名
    public List<String> getSubmitFileNames(){
    	 List<String>  names= new ArrayList<>();
    //这里是需要一步一步紧跟判断的,分开判断会有些问题
		    try {
				partlist=(List<Part>) request.getParts();
			} catch (IOException | ServletException e) {
				e.printStackTrace();
			}
//		    System.out.println("大小:"+partlist.size());  
		  for (int i = 0; i < partlist.size(); i++) {
			
		    	String head = partlist.get(i).getHeader("Content-Disposition");
				if (head.lastIndexOf("filename")>-1) { //如果是文件的话
					String	filename = head.substring(head.lastIndexOf("filename=") + 10,
							head.length() - 1);
					
					if (head.endsWith("filename=\"\"")) {
						partlist.remove(i); //删除空文件的part
						i--;
						continue;
					}
					System.out.println("文件名:"+filename);
					names.add(filename);
				}else{
					partlist.remove(i); //删除普通字段的part
					i--;
				}
			}
		   return names;
    }
    
    //多文件上传
    public void  upload(String storeFolder) throws ServletException, IOException {
    	// 指定上传的绝对路径
    	String Dir = request.getServletContext().getRealPath(storeFolder); //WEB-INF/uploads
    	File Dirfile = new File(Dir);
    	if (!Dirfile.exists()) { //必须要判断
    		Dirfile.mkdirs();
    	}
    	
    	 List<String> filenames= getSubmitFileNames();
    	 System.out.println(filenames);
    	 System.out.println(partlist.size());
//    	 开始上传
    	//只要list里面有一个是真正文件对应的part,就可以上传多个
    	try {
    		if (filenames!=null &&filenames.size()>0) {
    			for (int i = 0; i < filenames.size(); i++) {
    				partlist.get(i).write(Dir + File.separator + filenames.get(i));
				}
			}
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    }
}


2.Servlet3.1  使用

添加了getSubmittedFileName()获取方法名

public class UploadUtils1 {
	private HttpServletRequest request;
	private HttpServletResponse response;
	private Part part;
	
    public UploadUtils1(HttpServletRequest request, HttpServletResponse response){
    	this.request=request;
    	this.response=response;
    }
    
    //上传单个文件
    public void  upload(String storeFolder,String fileName) throws ServletException, IOException {
		// 指定上传的绝对路径
		String Dir = request.getServletContext().getRealPath(storeFolder); //WEB-INF/uploads
		File Dirfile = new File(Dir);
		if (!Dirfile.exists()) { //必须要判断
			Dirfile.mkdirs();
		}
		// 开始上传
		try {
			if (fileName!=null) {
				part.write(Dir + File.separator + fileName);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
    
	
	//上传多个文件
    public void  upload(String storeFolder) throws ServletException, IOException {
    	// 指定上传的绝对路径
    	String Dir = request.getServletContext().getRealPath(storeFolder); //WEB-INF/uploads
    	File Dirfile = new File(Dir);
    	if (!Dirfile.exists()) { //必须要判断
    		Dirfile.mkdirs();
    	}
    	 List<String> names=new ArrayList<String>();
    	// 开始上传  
    	 List<Part> partlist=(List<Part>) request.getParts();
    	 
    	 for (int i = 0; i < partlist.size(); i++) { 
    		//文件名为null说明是普通字段,文件名为空说明是空上传栏,对应的part上传没有效果
    		 String fileName=partlist.get(i).getSubmittedFileName();
    		 if (fileName!=null && (!"".equals(fileName))) {
    			 names.add(fileName);
			}else{
				partlist.remove(i);
				i--;
			}
    	 }
    	
     	try {
     		if (names!=null &&names.size()>0) {
     			for (int i = 0; i < names.size(); i++) {
     				partlist.get(i).write(Dir + File.separator + names.get(i));
 				}
 			}
     	} catch (IOException e) {
     		e.printStackTrace();
     	}
    }
}


测试:

@WebServlet(urlPatterns="/Upload1")
@MultipartConfig(
		 location="temp", // 设置文件上传的临时目录
	     fileSizeThreshold = 1024 // 设置缓存大小
		//maxFileSize = 1024 * 1024 * 3, // 设置上传单个文件大小
//		maxRequestSize = 1024 * 1024 * 60 // 设置上传总大小
		)
public class Test extends HttpServlet{
	private static final long serialVersionUID = -1;
		public void doGet(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
			request.setCharacterEncoding("UTF-8");//默认
			response.setContentType("text/html;charset=utf-8");
			UploadUtils upload=new UploadUtils(request, response);
			//得到文件名
//		 String fileName=upload.getSubmitFileName("upload");
//		 upload.upload("/WEB-INF/files", fileName);
			
//		 upload.upload("/WEB-INF/files"); 
//		 response.getWriter().write("文件上传成功!");
		 
		 
			UploadUtils1 upload1=new UploadUtils1(request, response);
			upload1.upload("/WEB-INF/files");
		}

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

jsp页面:

<body>
  <form action="Upload1" method="post" enctype="multipart/form-data">
       描述:<input type="text" name="filetext"/><br/>
       文件1:<input type="file" name="upload" /><br/>
       文件2:<input type="file" name="upload" /><br/>
       文件3:<input type="file" name="upload" /><br/>
      <input type="submit" name="上传"/>
  </form>
  </body>


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值