`
leyoo
  • 浏览: 44462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

commons fileuplod 文件上传

阅读更多
文件上传2010-9-4 21:45
1.导入:commons-fileupload.jar  commons-io.jar

2.在服务器上的项目根目录下手动创建uploadFile文件夹用于存放上传文件,
  在uploadFile下创建temp文件夹用于缓存过大的图片。
  补充:也可通过代码实现上传时自动创建存放上传文件的目录。 

3.注意:上传图片路径:String uploadPath = req.getRealPath("/")+"/uploadFile";
        查看图片路径:String viewPath = request.getContextPath()+"/uploadFile";

4.不同操作系统获取文件路径分隔符
  包为java.util.Properties
  获取方法为Properties.getProperty(“file.separator”)
  补充:“/”在windows linux 系统上都适用。

5.上传用到的Servlet:FileUpload.java
public class FileUpload extends HttpServlet {
static Logger log = Logger.getLogger(FileUpload.class);
public void destroy() {
}
  public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
   res.setContentType( "text/html; charset=GBK");
   String picture_name = "";
   String picture_id = "";
   String product_id = "";
   PrintWriter out=res.getWriter();
   String uploadPath = req.getRealPath("/")+"/uploadFile"; // 用于存放上传文件的目录
   DiskFileItemFactory factory = new DiskFileItemFactory();
        // maximum size that will be stored in memory
        factory.setSizeThreshold(1024*1024*4);
        // the location for saving data that is larger than getSizeThreshold()
        factory.setRepository(new File(uploadPath+"/temp")); // 用于存放临时文件的目录
        ServletFileUpload upload = new ServletFileUpload(factory);
        // maximum size before a FileUploadException will be thrown
        upload.setSizeMax(1024*1024*8);
        try{
        List fileItems = upload.parseRequest(req);
        // assume we know there are two files. The first file is a small
        // text file, the second is unknown and is written to a file on
        // the server
        Iterator iter = fileItems.iterator();
//  正则匹配,过滤路径取文件名
     String regExp=".+\\\\(.+)$";
//  过滤掉的文件类型
  String[] errorType={".exe",".com",".cgi",".asp"};
     Pattern p = Pattern.compile(regExp);
     // 保存文件域的信息数组
        while (iter.hasNext()) {
         FileItem item = (FileItem)iter.next();
         //是文件域的所有表单信息
         if(item.isFormField()){
        picture_name = item.getString();
        String[] params = picture_name.split("==");
        if(params!=null&&params.length>1){
        product_id = params[0];
        picture_id = params[1];
        }
        log.error("==========产品ID="+product_id+"====图片ID="+picture_id);
         }
         //不是文件域的所有表单信息
         if (!item.isFormField()) {
             String name = item.getName();
             long size = item.getSize();
             if((name==null||name.equals("")) && size==0)
                 continue;
          Matcher m = p.matcher(name);
         boolean result = m.find();
         if (result){
             for (int temp=0;temp<errorType.length;temp++){
             if (m.group(1).endsWith(errorType[temp])){
                   throw new IOException(name+": wrong type");
             }
             }
             try{
//         保存上传的文件到指定的目录
//         在下文中上传文件至数据库时,将对这里改写
//                      item.write(new File(uploadPath +"\\"+ m.group(1)));
     //取到上传文件的扩展名
                 String extand = m.group(1).substring(m.group(1).indexOf("."));
//                  上传新图片
                 String picName = RandomNum.getRandomNum()+extand;
                                     //将图片重新命名为任意位数的随机数
                 String picPath = uploadPath +"/"+ picName; //新图片路径
                 item.write(new File(picPath));//写入新图片
                 log.error("图片上传成功!");
                 out.print("图片文件上传成功!<br>"+name+"&nbsp;&nbsp;"+size+"<br>");
                     PictureManager pictureManager = PictureManager.getInstance();
//                      Picture picture = pictureManager.searchPicture(picture_id);
//                      log.error("=======旧图片名称====="+picture.getPicture_path());
                    
                     //构建新图片数据库信息保存对象
                     Picture pic = new Picture();
                     pic.setProduct_id(product_id);
                     pic.setPicture_id(picture_id);
                     log.error("=======product_id====="+product_id);
                     pic.setPicture_path(picName);
                     if("0".equals(picture_id)){
                    //添加记录
                    pictureManager.addPicture(pic);
                    log.error("添加记录成功!");
                    res.sendRedirect("../servlet/PictureServlet?action=list&product_id="+product_id);
                     }else{
                    //删除旧图片
                    Picture picture = pictureManager.searchPicture(picture_id);
                    String oldpicPath = uploadPath +"/"+picture.getPicture_path();  //获取旧图片路径
                    oldpicPath=oldpicPath.replaceAll("\\\\", "/");
                    File oldPic = new File(oldpicPath);
                    //oldPic.createNewFile();
                    if(oldPic.exists()){
                    oldPic.delete();
                    log.error("旧图片删除成功!");
                    }
                    //更新记录
                    pictureManager.modifyPicture(pic);
                    log.error("更新记录成功!picName="+picName);
                    res.sendRedirect("../servlet/PictureServlet?action=list&product_id="+product_id);
                     }
                   
                   
                   }
                   catch(Exception e){
                     out.println(e);
                     log.error("图片上传失败!");
                   }
                }
               else
               {
                 throw new IOException("fail to upload");
               }
               }
           }
        }
         catch (IOException e){
           out.println(e);
         }
         catch (FileUploadException e){
              out.println(e);
         }
//  保存上传的文件到指定的目录
//  在下文中上传文件至数据库时,将对这里改写
    }

/**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occure
  */
public void init() throws ServletException {
  // Put your code here
}
}
6. 在web.xml文件中配置上传的servlet
  <servlet>
    <servlet-name>FileUpload</servlet-name>
    <servlet-class>com.servlet.FileUpload</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FileUpload</servlet-name>
    <url-pattern>/servlet/FileUpload</url-pattern>
  </servlet-mapping>
  <servlet-mapping>

7.如果可以最好将servlet放在项目的根目录下。
0
0
分享到:
评论

相关推荐

    commons-fileuplod2.1,commons-io1.4.zip

    commons-fileuplod2.1,commons-io1.4.zip commons-fileuplod2.1,commons-io1.4.zip commons-fileuplod2.1,commons-io1.4.zip commons-fileuplod2.1,commons-io1.4.zip

    使用Commons进行文件上传

    接下来,我们将详细讨论如何使用Commons FileUpload进行文件上传。 1. **初始化Servlet环境**:在Servlet容器(如Tomcat)中,你需要配置一个Servlet来接收文件上传请求。在Servlet的`init()`方法中,可以设置`...

    fileupload commons-io上传文件

    Apache Commons IO和Commons FileUpload两个库为开发者提供了强大的文件处理能力,特别是针对文件上传操作。这两个库是Java社区广泛使用的开源组件,它们简化了原本复杂的HTTP多部分请求解析过程。 Apache Commons ...

    java基于commons文件上传工具类

    Apache Commons FileUpload库是Java社区提供的一个强大且灵活的文件上传解决方案。这个库使得处理HTTP请求中的多部分数据(通常用于文件上传)变得非常简单。下面我们将深入探讨如何使用Apache Commons FileUpload...

    使用commons-fileupload上传文件

    【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...

    commons-文件上传必备jar包二合一-io1.4+fileupload1.2.1

    Apache Commons项目为开发者提供了两个非常重要的库:Commons IO和Commons FileUpload,这两个库使得文件上传操作变得简单易行。在"commons-文件上传必备jar包二合一-io1.4+fileupload1.2.1"中,包含了这两个库的...

    commons-fileupload文件上传实例代码

    在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库为开发者提供了方便、灵活的文件上传解决方案。本教程将深入讲解如何使用`commons-fileupload`库处理中文乱码问题以及实现多文件上传。 ...

    commons-fileupload实现文件上传

    本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...

    commons-fileupload 文件上传 图片上传 demo

    在`描述`中提到的`commons-fileupload-1.2.2.jar`和`commons-io.jar`是实现文件上传功能所必需的依赖库。`commons-fileupload-1.2.2.jar`是核心库,包含了文件上传的处理逻辑;`commons-io.jar`则是Apache Commons ...

    commons fileuoload 文件上传jar包

    - Commons FileUpload允许设置最大文件大小和总上传大小,防止服务器被大文件或大量文件耗尽资源。超过限制的文件会被拒绝,或者在磁盘上临时存储。 7. **异常处理**: - 在处理文件上传过程中,可能会遇到各种...

    文件上传的jar,commons-io,flieupload

    `文件上传的jar,commons-io,flieupload`这个标题所指的,就是利用Apache Commons IO和Apache Commons FileUpload两个库来实现JSP中的文件上传功能。这两个库都是Apache软件基金会开源的Java工具包,为处理输入/输出...

    commons-fileupload文件上传实例

    Apache Commons FileUpload是Java中处理文件上传的一个强大库,它简化了这一过程。本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** ...

    利用org.apache.commons.fileupload上传多个文件

    在使用 Apache Commons FileUpload 进行文件上传之前,你需要确保以下组件已经准备就绪: 1. **引入依赖**:首先,你需要下载并添加 `org.apache.commons.io` 和 `log4j` 的 JAR 包到你的项目类路径中。在本例中,`...

    基于apache commons.fileupload的文件上传组件,改进了上传速度

    apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...

    利用commons-fileupload上传组件上传文件(一)

    在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...

    org.apache.commons.fileupload 文件上传至数据库

    标题“org.apache.commons.fileupload 文件上传至数据库”指的是使用Apache Commons FileUpload库将用户上传的文件存储到数据库中的技术。Apache Commons FileUpload是Apache软件基金会的一个开源项目,它提供了一个...

    commons-fileupload实现文件上传下载

    ### Commons-FileUpload 实现文件上传下载 #### 知识点概述 Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 ...

    使用commons-fileupload-1.2.1实现文件上传操作

    在标题和描述中提到的"commons-fileupload-1.2.1"是该库的一个特定版本,它允许开发者在Java应用程序中实现文件上传的功能。这个版本在发布时可能是最新的,但现在可能已经有一些更新。 使用Apache Commons ...

    commons-fileupload-1.2上传文件架包

    Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的文件上传功能。...配合Commons Lang和Commons IO,开发者可以更高效地管理上传文件的生命周期,从解析请求到存储文件,再到后续的操作和验证。

Global site tag (gtag.js) - Google Analytics