表单添加图片,commons-fileupload实现上传


======先设置form 表单的属性:

<form name ="dataFrm" id="dataFrm" action="doAdd.jsp" method="post" enctype="multipart/form-data">

======= 用了 commons-fileupload-1.2.2-bin 组件

======= 用了 commons-io-2.4-bin 组件

核心类   ServletFileUpload

========

第三方组件
   第三方组织提供的组件
   http://commons.apache.org
commons-fileupload
   apache公司提供的组件,实现上传功能
为新闻添加图片的步骤:
   下载commons-fileupload-1.2.2.jar和commons-io-
2.4.jar导入项目
   准备添加新闻的页面,提交至JSP
   在JSP中实现文件上传和新闻添加

小结

准备新闻的提交页面
   在表单中指定属性enctype="multipart/form-data"
   修改表单的提交方式为post
在JSP中实现文件上传
   检查请求类型
   声明对象
   转换请求对象
boolean isMultipart=ServletFileUpload.isMultipartContent(request);
if(isMultipart)//enctype="multipart/form-data",并且method="post",
isMultiparttrue
FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
List<FileItem> items=null;
items=upload.parseRequest(request);

在JSP中实现文件上传
   检查请求类型
   声明对象
   转换请求对象
   保存上传的文件
   获取普通字段
if(!item.isFormField()){
File fullFile=new File(item.getName());
File uploadFile=new File(realPath,fullFile.getName());
item.write(uploadFile);
}
if (item.isFormField()){
fieldName = item.getFieldName();
if (fieldName.equals("title")){
news.setTitle(item.getString("UTF-8"));
}…
}

==========================================

使用<img>标签实现图片
的展现


 

<%
	//接收增加的新闻信息,并调用后台方法,将新闻信息插入数据库
	//设置请求的字符编码UTF-8
	request.setCharacterEncoding("utf-8");
	//创建News对象
	News news = new News();
	Date createDate = new Date();
	news.setCreateDate(createDate);
	//
	boolean bRet = false;
	boolean bUpload = false;
	//
	//解析请求之前先判断请求类型是否为文件上传类型
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	//指定文件上传路径(项目部署在服务器上的真实路径的/upload/)
	String uploadPath = request.getSession().getServletContext().getRealPath("upload/");
	//如果uploadPath目录不存在,就创建目录  
	File savedDir = new File(uploadPath);
	if(!savedDir.exists()){//创建文件夹
		savedDir.mkdir();//mkdir只能在已经存在的目录中创建创建文件夹;createNewFile可以创建文件如:a.txt
	}
	if(isMultipart){//处理文件上传
		//创建文件上传的核心类ServletFileUpload
		//实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
		FileItemFactory factory = new DiskFileItemFactory();
		// 用以上工厂实例化上传组件
		ServletFileUpload upload = new ServletFileUpload(factory);
		//解析请求
		List<FileItem> items = upload.parseRequest(request);
		//得到迭代器
		Iterator<FileItem> iter = items.iterator();
		while(iter.hasNext()){
			FileItem item = iter.next();
			//判断fileitem是文本域还是文件域
			if(item.isFormField()){//若是普通的文本表单控件
				if(item.getFieldName().equals("categoryId")){
					news.setCategoryId(Integer.parseInt(item.getString()));//获取文本域的value的值
				}else if(item.getFieldName().equals("title")){
					news.setTitle(item.getString("UTF-8"));//获取文本域的value的值
				}else if(item.getFieldName().equals("summary")){
					news.setSummary(item.getString("UTF-8"));//获取文本域的value的值
				}else if(item.getFieldName().equals("newscontent")){
					news.setContent(item.getString("UTF-8"));//获取文本域的value的值
				}else if(item.getFieldName().equals("author")){
					news.setAuthor(item.getString("UTF-8"));//获取文本域的value的值
				}
			}else{//若是文件表单控件
					String fileName = item.getName();// 获得文件名(全路径)
					//判断文件表单名是否为空
					if(fileName!=null&&!fileName.equals("")){
						//把得到的全路径名通过 fullFile转化一下,获得文件的名 
						File fullFile = new File(fileName);
						//将文件保存到指定的路径下
						//文件名:fullFile.getName()---保存路径:uploadPath
						File saveFile = new File(uploadPath,fullFile.getName());
						//写入到saveFilewe文件----上传操作
						item.write(saveFile);
						news.setPicPath(fullFile.getName());
						bUpload=true;
					}
			}
		}
		if(bUpload){
			System.out.println("上传成功之后的文件名:" + news.getPicPath());
			//调用后台的方法,将新闻信息插入数据库中
		}
		
		bRet = newsService.addNews(news);
		if(bRet){//成功
			//重定向
			response.sendRedirect("newsDetailList.jsp");
		}else{//失败
			//转发
			//request.getRequestDispatcher("newsDetailCreateSimple.jsp").forward(request,response);
		%>
			<jsp:forward page="newsDetailCreateSimple.jsp"></jsp:forward>
		<%}
	}
%>
 
 

 

猜你喜欢

转载自4636.iteye.com/blog/2323948
今日推荐