======先设置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",
则isMultipart为true
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>
<%}
}
%>