form表单属性为enctype=“multipart/form-data“时,如果获取表单普通域的值

在做jsp页面开发的时候,难免会遇上需要做文件上传的功能,这个时候form表单的enctype属性就只能设置为multipart/form-data,而且method也必须设置为post提交方式,博主第一次做的时候,不清楚这里面的机制,以为设置了enctype属性之后,获取表单的其他字段值还是和原来一样用request.getParameter()去获取,然后就杯具了,通过上网查找资料,发现原来不能这样子去获取值了,这里就给大家介绍一个普遍使用的方法

这里我们采用commons-fileupload-1.2.1.jar、commons-io-1.4.jar这两个jar包来做文件上传,

request.setCharacterEncoding("utf-8");
	boolean bRet = false;
	boolean bUpload = false;
	String uploadFileName = "";
	String fieldName = "";
	News news = new News();
	news.setCreateDate(new Date());
	//解析请求之前先判断请求类型是否为文件上传类型
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	//指定上传位置
	String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/");
    //String uploadFilePath = request..getServletContext().getRealPath("upload/");
	
	File saveDir = new File(uploadFilePath);  
	//如果目录不存在,就创建目录  
	if(!saveDir.exists()){  
	    saveDir.mkdir();  
	}  
	
	if(isMultipart){
		//创建文件上传核心类 
		FileItemFactory factory = new DiskFileItemFactory(); // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
		ServletFileUpload upload = new ServletFileUpload(factory); // 用以上工厂实例化上传组件
		try{
			//处理表单请求
			List<FileItem> items = upload.parseRequest(request);
			Iterator<FileItem> iter = items.iterator();
			while(iter.hasNext()){
				FileItem item = (FileItem)iter.next();
				if(item.isFormField()){// 如果是普通表单控件 
					fieldName = item.getFieldName();// 获得该字段名称
					if(fieldName.equals("title")){
						news.setTitle(item.getString("UTF-8"));//获得该字段值 
					}else if(fieldName.equals("categoryId")){
						news.setCategoryId(Integer.parseInt(item.getString()));
					}else if(fieldName.equals("summary")){
						news.setSummary(item.getString("UTF-8"));
					}else if(fieldName.equals("newscontent")){
						news.setContent(item.getString("UTF-8"));
					}else if(fieldName.equals("author")){
						news.setAuthor(item.getString("UTF-8"));
					}
				}else{// 如果为文件域
					String fileName = item.getName();// 获得文件名(全路径)
					if(fileName != null && !fileName.equals("")){
						File fullFile = new File(fileName);
						File saveFile = new File(uploadFilePath,fullFile.getName());//将文件保存到指定的路径
						item.write(saveFile);
						uploadFileName = fullFile.getName();
						news.setPicPath(uploadFileName);
						bUpload = true;
					
					}
				
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}	
	System.out.println("上传成功之后的文件名:" + news.getPicPath());
	//调用后台的方法,将新闻信息插入数据库中
	bRet = newsService.add(news);
	if(bRet)
		response.sendRedirect("newsDetailList.jsp");
	else
		response.sendRedirect("newsDetailCreateSimple.jsp");

item.getFileIdName(); - 获得该普通form域的字段名称

item.getString("UTF-8"); - 获得该普通form域的字段值

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值