`

fileupload 实现文件上传

阅读更多

Commons FileUpload组件使用方法

1,下载Commons FileUpload组件包,具体可以在http://commons.apache.org网上找,开源的,免费下载.

2,下载Commons IO,上面的组件必须依赖它才能实现功能.该包也在上面的网页上有提供.

注意:

如果你是使用Tomcat直接开发应用程序,则把上面下载的两个.ZIP文件解压后,将解压后的commons-io-1.4-sources.jarcommons-fileupload-1.2.1.jar两个.jar文件放到tomcatwebapps\你的webapp\WEB-INF\lib\,目录不存在的话请自己创建.如果你是直接使用MyEclipse进行开发应用,刚把上面的两个.jar文件放到自己创建的用户库里面,在用到这个库时再导入到应用程序中.

步骤:

1.创建一个Servlet----Upload.java文件,用于实现上传文件

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
public class Upload extends HttpServlet {
private String uploadPath = "d:\\upload\\"; // 上传文件的目录
private String tempPath = "d:\\upload\\tmp\\"; // 临时文件目录

doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。以下是示例代码:
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置最大文件尺寸,这里是4MB
fu.setSizeMax(4194304);
// 设置缓冲区大小,这里是4kb
fu.setSizeThreshold(4096);
// 设置临时目录:
fu.setRepositoryPath(tempPath);

// 得到所有的文件:
List fileItems = fu.parseRequest(request);//解析用户请求的参数,取出文件上传信息
Iterator i = fileItems.iterator();
// 依次处理每一个文件:
while(i.hasNext()) {
FileItem fi = (FileItem)i.next();
// 获得文件名,这个文件名包括路径:
String fileName = fi.getName();
// 在这里可以记录用户和文件信息
// ...
// 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:
fi.write(new File(uploadPath + "a.txt"));
}
}
catch(Exception e) {
// 可以跳转出错页面
}
}

编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jartomcat\common\lib\servlet-api.jar
2.配置servlet,用记事本打开tomcat\webapps\你的webapp\WEB-INF\web.xml,没有的话新建一个。
典型配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>Upload</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/fileupload</url-pattern>
</servlet-mapping>
</web-app>

3.配置好servlet后,启动tomcat,写一个简单的html测试:
<form action="fileupload" method="post"
enctype="multipart/form-data" name="form1">
<input type="file" name="file">
<input type="submit" name="Submit" value="upload">
</form>
注意action="fileupload"其中fileupload是配置servlet时指定的url-pattern

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {

   resp.setContentType("CONTENT_TYPE");
   try {
    DiskFileUpload diskFileUpload=new DiskFileUpload();
    diskFileUpload.setHeaderEncoding("GBK");
    List fileItems=diskFileUpload.parseRequest(req);
    ErpSTService erpSTService=new ErpSTService();
    String strWJLJ="";
    String strTmp="";
    for(int m=0;m<fileItems.size();m++){
     FileItem fileItem=(FileItem) fileItems.get(m);
     if(!fileItem.isFormField()){
      strWJLJ=fileItem.getName().trim();
      long size=fileItem.getSize();
      if((strWJLJ == null || strWJLJ.equals("")) && size == 0){
       continue;
      }else{
       String strUploads=getAddress();
       if (!new File(strUploads + "erpSt/").isDirectory())
        new File(strUploads + "erpSt/").mkdirs();
       strTmp = strUploads + "erpSt"
         + "/";
       diskFileUpload.setRepositoryPath(strTmp);
       strTmp = strTmp +"impexcl.xls";
       /////////////////////////////////////////////////////////
       System.out.println("准备上传文件:" + strTmp);
       //////////////////////////////////////////////////////////
       fileItem.write(new File(strTmp));
      }
     }
    }
    Workbook book = Workbook.getWorkbook(new File(strTmp));
    Sheet sheet = book.getSheet("Sheet1");
    // 工作表有数据的行数
    int lastCell = 0;
    String curCell = "";
    // 必填项
    String strBug = "";
    if (lastCell == 0) {
     lastCell = sheet.getRows();
     System.out.println(lastCell);
    }
//     验证必填项
    for(int i=1;i<lastCell;i++)
    {
    
     Cell cell = sheet.getCell(0, i);
     if(!cell.getContents().trim().equals(""))
     {
      cell=sheet.getCell(1,i);
      if(cell.getContents().trim().equals(""))
      {
       strBug=strBug+""+(i+1)+"行的内容为空,请输入!<br>";
      }
//      cell=sheet.getCell(7,i);
//      if(cell.getContents().trim().equals(""))
//      {
//       strBug=strBug+""+(i+1)+"行的标准答案为空,请输入!<br>";
//      }
      cell=sheet.getCell(9, i);
      if(cell.getContents().trim().equals(""))
      {
       strBug=strBug+""+(i+1)+"行的试题类型为空,请输入!<br>";
      }
     }
    }
    if(strBug.trim().equals(""))
    {
     for(int i=1;i<lastCell;i++)
     {
      ErpSt erpSt=new ErpSt();
//      System.out.println(sheet);
//      System.out.println(sheet.getCell(0, i).getContents());
//      System.out.println(sheet.getCell(1, i).getContents());
      if(!(sheet.getCell(0, i).getContents().trim().equals("")||sheet.getCell(0, i).getContents().trim()==null)){
       erpSt.setStbh(Long.parseLong(sheet.getCell(0, i).getContents().trim()));
       erpSt.setStnr(sheet.getCell(1, i).getContents().trim());
       erpSt.setDaa(sheet.getCell(2, i).getContents().trim());
       erpSt.setDab(sheet.getCell(3, i).getContents().trim());
       erpSt.setDac(sheet.getCell(4, i).getContents().trim());
       erpSt.setDad(sheet.getCell(5, i).getContents().trim());
       erpSt.setDae(sheet.getCell(6, i).getContents().trim());
       if(sheet.getCell(7, i).getContents().trim().equals("正确")||sheet.getCell(7, i).getContents().trim().equals("")){
        erpSt.setZqda("T");       
       }else if(sheet.getCell(7, i).getContents().trim().equals("错误")||sheet.getCell(7, i).getContents().trim().equals("")){
        erpSt.setZqda("F");              
       }else{
        erpSt.setZqda(sheet.getCell(7, i).getContents().trim());                     
       }
       erpSt.setErpmk(sheet.getCell(8, i).getContents().trim());
       if(sheet.getCell(9, i).getContents().trim().equals("单选")){
        erpSt.setStlx("1");
       }
       else if(sheet.getCell(9, i).getContents().trim().equals("多选")){
        erpSt.setStlx("2");      
       }else if(sheet.getCell(9, i).getContents().trim().equals("判断")){
        erpSt.setStlx("3");    
       }else if(sheet.getCell(9, i).getContents().trim().equals("个人实操")){
        erpSt.setStlx("4");    
       }else{
        erpSt.setStlx("5");    
       }
       if(!erpSTService.insert(erpSt)){
        book.close();
        FileReaderWriter.delNrglByPath(strTmp);
        req.setAttribute("imperror", "试题从序号为 "+i+" 行开始导入失败,<br>错误原因可能因为序号在数据库中已存在,请修改Excel表中序号,点击确定重新导入!");
        req.setAttribute("requestID", "ERP_DW_stdr");
        req.getRequestDispatcher("/ewns/erp/impexcel/impSucc.jsp").forward(req, resp); 
        return;
       }
      
      }else break;
     }
     book.close();
     FileReaderWriter.delNrglByPath(strTmp);
     req.setAttribute("impok", "恭喜,试题导入成功!,点击确定继续操作。");
     req.setAttribute("requestID", "ERP_DW_adminmnList");
     req.getRequestDispatcher("/ewns/erp/impexcel/impSucc.jsp").forward(req, resp);
    }
    else
    {
     book.close();
     FileReaderWriter.delNrglByPath(strTmp);
     req.setAttribute("imperror", "试题导入失败,<br>"+strBug+"<br>点击确定重新导入!");
     req.setAttribute("requestID", "ERP_DW_stdr");
     req.getRequestDispatcher("/ewns/erp/impexcel/impSucc.jsp").forward(req, resp); 
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
}

 

 

 

 

本文以Commons FileUpload组件为例说明怎样为JSP应用添加文件上传功能.当然也有其它组件能实现此功能,本文只是为了说明Commons FileUpload组件的用法

  准备工作:

 

  1,下载Commons FileUpload组件包,具体可以在http://commons.apache.org网上找,开源的,免费下载.

 

  2,下载Commons IO,上面的组件必须依赖它才能实现功能.该包也在上面的网页上有提供.

 

  注意:

 

如果你是使用Tomcat直接开发应用程序,则把上面下载的两个.ZIP文件解压后,将解压后的commons-io-1.4-sources.jarcommons-fileupload-1.2.1.jar两个.jar文件放到tomcatwebapps\你的webapp\WEB-INF\lib\,目录不存在的话请自己创建.如果你是直接使用MyEclipse进行开发应用,刚把上面的两个.jar文件放到自己创建的用户库里面,在用到这个库时再导入到应用程序中.

 

 

 

 步骤:

 

1.创建一个Servlet----Upload.java文件,用于实现上传文件

 

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import org.apache.commons.fileupload.*;

public class Upload extends HttpServlet {

    private String uploadPath = "d:\\upload\\"; // 上传文件的目录

    private String tempPath = "d:\\upload\\tmp\\"; // 临时文件目录

 

    在doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。以下是示例代码:

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException

{

    try {

        DiskFileUpload fu = new DiskFileUpload();

        // 设置最大文件尺寸,这里是4MB

        fu.setSizeMax(4194304);

        // 设置缓冲区大小,这里是4kb

        fu.setSizeThreshold(4096);

        // 设置临时目录:

        fu.setRepositoryPath(tempPath);

 

        // 得到所有的文件:

        List fileItems = fu.parseRequest(request);//解析用户请求的参数,取出文件上传信息

        Iterator i = fileItems.iterator();

        // 依次处理每一个文件:

        while(i.hasNext()) {

            FileItem fi = (FileItem)i.next();

            // 获得文件名,这个文件名包括路径:

            String fileName = fi.getName();

            // 在这里可以记录用户和文件信息

            // ...

            // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:

            fi.write(new File(uploadPath + "a.txt"));

        }

    }

    catch(Exception e) {

        // 可以跳转出错页面

    }

}

 

编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jartomcat\common\lib\servlet-api.jar

2.配置servlet,用记事本打开tomcat\webapps\你的webapp\WEB-INF\web.xml,没有的话新建一个。

典型配置如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

 

<web-app>

    <servlet>

        <servlet-name>Upload</servlet-name>

        <servlet-class>Upload</servlet-class>

    </servlet>

 

    <servlet-mapping>

        <servlet-name>Upload</servlet-name>

        <url-pattern>/fileupload</url-pattern>

    </servlet-mapping>

</web-app>

 

3.配置好servlet后,启动tomcat,写一个简单的html测试:

<form action="fileupload" method="post"

enctype="multipart/form-data" name="form1">

  <input type="file" name="file">

  <input type="submit" name="Submit" value="upload">

</form>

注意action="fileupload"其中fileupload是配置servlet时指定的url-pattern

 

<!--EndFragment-->

分享到:
评论

相关推荐

    commons-fileupload实现文件上传

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

    commons-fileupload实现文件上传下载

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

    使用commons-fileupload实现的文件上传和下载

    通过以上步骤,你可以成功地使用Apache Commons FileUpload实现文件上传和下载功能,并避免中文乱码问题。在实际开发中,还可以结合Spring MVC或Struts等框架,进一步简化代码和提高代码的可维护性。

    struts1.2和commons-fileupload实现文件上传

    Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...

    Apache Commons fileUpload实现文件上传

    ### Apache Commons fileUpload 实现文件上传详解 #### 引言 Apache Commons fileUpload 是一个用于处理 HTTP 文件上传的 Java 库。它简化了文件上传的过程,使得开发人员能够轻松地处理来自客户端的文件数据。本...

    fileupload实现文件上传和下载

    我自己编写的jsp页面利用fileupload组建实现文件上传和下载,简单易懂。仅供初学者参考...

    commons-fileupload文件上传实例

    本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP...

    commons fileupload实现文件上传的实例代码

    **借助Commons FileUpload组件实现文件上传** Apache Commons FileUpload组件简化了文件上传的处理过程。首先,你需要在项目中引入两个JAR包:`commons-fileupload.jar`和`commons-io.jar`。然后,在Servlet中,你...

    commons fileupload实现文件上传

    总的来说,Apache Commons FileUpload是Java Web开发中不可或缺的工具,它简化了文件上传的复杂性,使得开发者能够更专注于业务逻辑,而不用过多关心底层的文件处理细节。正确使用和配置这个库,可以在保证用户体验...

    C# .NET FileUpload 多文件上传例子

    首先,我们要知道ASP.NET中的`&lt;asp:FileUpload&gt;`控件是实现文件上传的核心组件。它可以允许用户从本地计算机选择一个或多个文件,并将这些文件上传到服务器。在多文件上传中,我们需要确保控件的`Multiple`属性设置...

    使用fileupload组件实现文件上传功能

    使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...

    JSP组件commons-fileupload实现文件上传

    本文实例为大家分享了JSP使用commons-fileupload实现文件上传代码,供大家参考,具体内容如下 1、准备: 将commons-fileupload-1.1.zip和commons-io-1.1.zip复制到”\WEB-INF\lib”目录下 2、首先是Servlet:...

    commons-fileupload和smartupload实现文件上传

    在上述例子中,我们看到了使用Commons FileUpload实现文件上传的步骤: 1. 创建上传页面:HTML表单使用`enctype="multipart/form-data"`属性,指定上传文件的类型。在`&lt;input type="file"&gt;`标签中,用户可以选择要...

    FileUpload多文件上传(2.0)

    "FileUpload多文件上传(2.0)"这个主题聚焦于2.0版本的ASP.NET中,如何使用C#来实现用户友好的多文件上传功能。下面将详细阐述这一技术的关键点。 首先,让我们了解`FileUpload`控件。在ASP.NET中,`FileUpload`控件...

    java实现的文件上传下载FileUpLoad

    Java 实现的文件上传下载功能是Web开发中的一个重要部分,主要涉及到HTTP协议、Servlet、文件I/O以及数据库操作等技术。在这个"FileUpLoad"项目中,开发者使用了Struts2框架来处理用户请求,Oracle数据库存储文件元...

    Asp.net 2.0 用FileUpload 控件实现多文件上传

    要实现多文件上传,我们需要对FileUpload控件做一些扩展,因为ASP.NET 2.0原生的FileUpload控件仅支持单个文件上传。一种常见的方法是使用HTML5的`&lt;input type="file" multiple /&gt;`特性,这允许用户选择多个文件。...

Global site tag (gtag.js) - Google Analytics