servlet组建上传文件

表单上传,普通字段和文件都可以接收,返回文件上传后的路径

	public static String  upload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		String msg="";
		String oidValue="";
		File file = new File(filePath);
		if (!file.exists()) {
			System.out.println(filePath + "目录不存在,需要创建");
			file.mkdirs();
		}
		/**
		 * 使用Apache文件上传组件处理文件上传步骤:
		 * 
		 * */
		//设置环境:创建一个DiskFileItemFactory工厂    
		DiskFileItemFactory factory = new DiskFileItemFactory();

		//设置上传文件的临时目录
//		factory.setRepository(new File(tempFilePath));//设置文件缓存目录 
//		factory.setSizeThreshold(1024*1024); 
		//核心操作类:创建一个文件上传解析器。
		ServletFileUpload upload = new ServletFileUpload(factory);
		//解决上传"文件名"的中文乱码
		upload.setHeaderEncoding("UTF-8");

		//判断enctype:判断提交上来的数据是否是上传表单的数据
		if(!ServletFileUpload.isMultipartContent(request)){
			msg="不是上传文件,程序终止!";
			/*        	  request.setAttribute("msg",msg);
        	  request.getRequestDispatcher("/jieguo.jsp").forward(
                      request, response);*/
			return msg;
		}
		//使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单数据
		try{

			List<FileItem> items =upload.parseRequest(request);
			for(FileItem item:items){
				//如果fileitem中封装的是普通输入项的数据(输出名、值)
				if(item.isFormField()){
					String filedName = item.getFieldName();//普通输入项数据的名
					//解决普通输入项的数据的中文乱码问题
				    oidValue = item.getString("UTF-8");//普通输入项的值
					System.out.println("普通字段:"+filedName+"=="+oidValue);
				}else{
					//如果fileitem中封装的是上传文件,得到上传的文件名称,        
					String fileName = item.getName();//上传文件的名
					System.out.println("文件名=="+fileName);
					//多个文件上传输入框有空 的 异常处理
					if(fileName==null||"".equals(fileName.trim())){  //去空格是否为空
						continue;// 为空,跳过当次循环,  第一个没输入则跳过可以继续输入第二个
					}
					//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
					//处理上传文件的文件名的路径,截取字符串只保留文件名部分。//截取留最后一个"\"之后,+1截取向右移一位("\a.txt"-->"a.txt")
					fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
					int pos = fileName.lastIndexOf(".");
					String str = fileName.substring(pos+1).toLowerCase();
					//判断上传文件必须是zip或者是rar否则不允许上传
					if ((!str.equals("doc"))&&(!str.equals("pdf"))&&(!str.equals("xls"))) {
						msg="上传文件格式错误,请上传.doc(.pdf)(.xls)格式的文件";
						return msg;
					}
					//拼接上传路径。存放路径+上传的文件名
					savePath= filePath+File.separatorChar+fileName;
					//构建输入输出流
					InputStream in = item.getInputStream(); //获取item中的上传文件的输入流 
					File excelFile=new File(savePath);
					if(!excelFile.exists()){
						excelFile.createNewFile();
					}
					OutputStream out = new FileOutputStream(savePath); //创建一个文件输出流

					//创建一个缓冲区
					byte b[] = new byte[1024];
					//判断输入流中的数据是否已经读完的标识
					int len = -1;
					//循环将输入流读入到缓冲区当中,(len=in.read(buffer))!=-1就表示in里面还有数据
					while((len=in.read(b))!=-1){  //没数据了返回-1
						//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath+"\\"+filename)当中
						out.write(b, 0, len);
					}
					//关闭流
					out.flush();
					out.close();
					in.close();
					//删除临时文件
					item.delete();//删除处理文件上传时生成的临时文件
					msg=savePath;
				}    
			} 			
		}catch(Exception e){
			e.printStackTrace();
			msg="服务器繁忙,请稍后再试!";
			return msg;
		}
		return msg;
	}
	

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值