java学习——apache commons fileupload实现上传
2015-10-12 16:24
781 查看
在实际工作中,我们总是会使用到上传图片的功能,至于java如何实现图片的上传,我们没必要去自己写一套上传的代码,因为上传的技术已经相当成熟,我们只要从网上找一个例子,调试好,然后集成到自己的项目中就行了,非常方便。那么今天,我就跟大家分享一下我通过apache commons fileupload实现的上传。
此次上传图片采用的方法二,只是将上传的图片名称保存到数据库中,而将上传的图片保存至tomcat服务器中,保存的目录是在代码中自动创建的。
commons-io-1.2.jar
![](http://img.blog.csdn.net/20151012155742553)
一、业务了解
首先,我们要清楚,每个上传的图片都要与数据库中的一条记录对应。因此,也就产生了多种存取方式。[code]将文件存放在tomcat(或其他)服务器中,然后将其名字改为该记录的主键名。
[code]将文件存放在tomcat(或其他)服务器中,然后将其名字存到相应的记录中。
[code]将文件存放在数据库中(不常用),通常我们只将系统自带的一些图片存在数据库中。
此次上传图片采用的方法二,只是将上传的图片名称保存到数据库中,而将上传的图片保存至tomcat服务器中,保存的目录是在代码中自动创建的。
二、开发环境搭建
需要下载的jar包,下载完成后,将其导入到java项目中。如图
commons-fileupload-1.1.1.jarcommons-io-1.2.jar
三、上传的实现
让我们看看java是怎么实现上传的。这里我们采用的是java学习——架构的设计是项目的核心中的model2模式,也就是java中的mvc模式,这里我们将上传的实现现在Servlet中,其继承自httpServlet类。1、item_upload.jsp页面
[code]<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="bjpowernode.drp.basedata.domain.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; Item item = (Item)request.getAttribute("item"); %> <html> <head> <base href="<%=basePath %>"> <title>物料维护</title> <link rel="stylesheet" href="style/drp.css"> <script src="script/client_validate.js"></script> <script language="javascript"> </script> </head> <body class="body1"> <!-- 注意这部分必须为post提交,而且必须要有enctype="multipart/form-data" --!> <form name="itemForm" target="_self" id="itemForm" method="post" action="servlet/item/FileUploadServlet" enctype="multipart/form-data"> <input type="hidden" name="itemNo" value="<%=item.getItemNo() %>"> <div align="center"> <table width="95%" border="0" cellspacing="2" cellpadding="2"> <tr> <td> </td> </tr> </table> <table width="95%" border="0" cellspacing="0" cellpadding="0" height="8"> <tr> <td width="522" class="p1" height="2" nowrap> <img src="images/mark_arrow_03.gif" width="14" height="14"> <b>基础数据管理>>物料维护>>上传物料图片</b> </td> </tr> </table> <hr width="97%" align="center" size=0> <table width="95%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="29"> <div align="right"> 物料代码: </div> </td> <td> <%=item.getItemNo() %> </td> </tr> <tr> <td height="26"> <div align="right"> 物料名称: </div> </td> <td> <%=item.getItemName() %> </td> </tr> <tr> <td height="26"> <div align="right"> 物料规格: </div> </td> <td> <%=item.getSpec() %> </td> </tr> <tr> <td height="26"> <div align="right"> 物料型号: </div> </td> <td> <%=item.getPattern() %> </td> </tr> <tr> <td height="26"> <div align="right"> 类别: </div> </td> <td> <%=item.getItemCategory().getName() %> </td> </tr> <tr> <td height="26"> <div align="right"> 计量单位: </div> </td> <td> <%=item.getItemUnit().getName() %> </td> </tr> <tr> <td height="74"> <div align="right"> 图片: </div> </td> <td> <img src="upload/<%=item.getFileName() %>" width="85" height="49"> </td> </tr> <tr> <td width="22%" height="29"> <div align="right"> <font color="#FF0000">*</font>选择图片: </div> </td> <td width="78%"> <input name="fileName" type="file" class="text1" size="40" maxlength="40"> </td> </tr> </table> <hr width="97%" align="center" size=0> <div align="center"> <input name="btn_upload" class="button1" type="submit" id="btn_upload" value="上传"> <input name="btnBack" class="button1" type="button" id="btnBack" value="返回" onClick="history.go(-1)"> </div> </div> </form> </body> </html>
2、处理上传文件的FileUploadServlet类
[code]public class FileUploadServlet extends HttpServlet { private ItemManager itemManager; private File uploadPath; private File tempPath; // 用于存放临时文件的目录 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ //使用Apache文件上传组件处理文件上传步骤: //1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 文件大于此临界值时,采用临时文件 factory.setSizeThreshold(4096); // 采用临时文件时,的临时文件目录 factory.setRepository(tempPath); //创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //设置上传文件大小的上限,-1表示无上限 upload.setSizeMax(1000000 * 20); try { //上传文件,并解析出所有的表单字段,包括普通字段和文件字段 List fileItems = upload.parseRequest(req); //用来存放物料代码 String itemNo = ""; //循环将所有的文件上传 for (Iterator iter = fileItems.iterator(); iter.hasNext();) { FileItem item = (FileItem) iter.next(); //是普通的表单输入域 if(item.isFormField()) { //得到物料代码 if ("itemNo".equals(item.getFieldName())) { itemNo = item.getString(); } } //是否为input="type"输入域 if (!item.isFormField()) { String fileName = item.getName(); //得到文件名 long size = item.getSize(); //得到文件大小 if ((fileName == null || fileName.equals("")) && size == 0) { continue; } //获取文件名称,截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); //保存文件,其实就是把缓存里的数据写到目标路径下 item.write(new File(uploadPath, fileName)); //调用itemManager对象将物料代码和其图片名称存入数据库 itemManager.uploadItemImage(itemNo,fileName); } } //重定向 res.sendRedirect(req.getContextPath() + "/servlet/item/SearchItemServlet"); } catch (Exception e) { e.printStackTrace(); throw new ApplicationException("上传失败!"); } } public void init() throws ServletException { uploadPath = new File(getServletContext().getRealPath("upload")); System.out.println("uploadPath=====" + uploadPath); //如果目录不存在 if (!uploadPath.exists()) { //创建目录 uploadPath.mkdir(); } //临时目录 tempPath = new File(getServletContext().getRealPath("temp")); if (!tempPath.exists()) { tempPath.mkdir(); } itemManager=new ItemManagerImpl(); } }
四、总结
此代码也是从网上找的,然后改了改。我觉得这就够了,我们需要站在巨人的肩膀上,利用现有的资源,达到自己的目的。当然,我们会在以后的学习过程中给大家介绍java实现下载等,请大家继续关注。相关文章推荐
- 学习Thrift的小认识
- apache和PHP如何整合在一起
- Apache POI 之 初学实战篇 (七) --- 抽取Excel内容
- 在apache上安装gitweb实现浏览器访问git服务器
- CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境
- apache和PHP如何整合在一起
- Linux下搭建Apache环境,执行Apache ab进行网站压力测试
- yum安装Apache Web Server后各个文件存放位置
- 截取web页面访问时间(Apache)
- Max os x 10.10.9 apache无法访问
- linux平台apache启动、关闭、重启的几种方式
- linux平台下apache的源码安装和将apache服务配置成系统服务
- mac 部署 apache
- MAC OS上搭建Apache、PHP、MySQL的Web服务器
- 什么是伪静态,以及ubuntu + apache 如何实现伪静态
- Apache Maven 入门
- 修改Apache Benchmark源码实现请求数据随机的压力测试
- 【手把手教你全文检索】Apache Lucene初探
- 使用Python + Apache POI提取Excel中的图片
- Web-Service之LAMP安装部署,MySql+Apache+PHP