`

commons-fileupload文件上传、下载

    博客分类:
  • java
阅读更多

今天复习了下commons-fileupload文件上传,写了个demo。需要的jar包为:commons-fileupload-1.2.1.jar、commons-io-1.4.jar。都可去apache下的commons下下载。

一、上传

1、index.jsp

view plaincopy to clipboardprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";  
%>  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <base href="<%=basePath%>">  
 
        <title>My JSP 'index.jsp' starting page</title>  
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">  
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
    </head>  
 
    <body>  
        <form action="/commons-fileupload/UploadServlet" method="post" enctype="multipart/form-data">  
            username:  
            <input type="text" name="username">  
            <br>  
            password:  
            <input type="password" name="password">  
            <br>  
            file1:  
            <input type="file" name="file1">  
            <br>  
            file2:  
            <input type="file" name="file2">  
            <br>  
            <input type="submit" value="submit">  
        </form>  
    </body>  
</html> 

2、UploadServlet.java

view plaincopy to clipboardprint?
package com.fileupload.servlet;  
 
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.util.List;  
 
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
 
import org.apache.commons.fileupload.FileItem;  
import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
import org.apache.commons.fileupload.servlet.ServletFileUpload;  
 
@SuppressWarnings("serial")  
public class UploadServlet extends HttpServlet {  
 
    @SuppressWarnings({ "unchecked", "deprecation" })  
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        request.setCharacterEncoding("UTF-8");  
        //设置文件存储路径  
        String path = request.getRealPath("/upload");  
        //实例化工厂  
        DiskFileItemFactory factory = new DiskFileItemFactory();  
        //设置在内存中存储文件的的大小为1M,如果超出1M,将写入磁盘  
        factory.setSizeThreshold(1024*1024);  
        //如果文件超出1M,将写入磁盘  
        factory.setRepository(new File(path));  
          
        ServletFileUpload servletFileUpload = new ServletFileUpload(factory);  
        try {  
       //将request解析成FileItem,每个FileItem对应页面的一个输入对象。  
        List<FileItem> list = servletFileUpload.parseRequest(request);  
        for(FileItem item :list){  
            if(item.isFormField()){//如果输入域是普通类型type=text(非file类型)  
                String name = item.getFieldName();  
                String value = item.getString("UTF-8");  
                request.setAttribute(name, value);  
                  
            }else{//如果输入域是type=file类型  
                  
                String name = item.getFieldName();  
                String value = item.getName();//将取到如下内容:eg:C:\Documents and Settings\liu\桌面\test.doc  
                int start = value.lastIndexOf("\\");  
                String fileName = value.substring(start+1);//解析成test.doc  
                request.setAttribute(name, fileName);  
                  
//              //使用普通流写入文件  
//              OutputStream out = new FileOutputStream(new File(path+"/"+fileName));  
//              InputStream in = item.getInputStream();  
//              byte buffer[]= new byte[1024];  
//              int length = 0;  
//              while((length=in.read(buffer))>0){  
//                  out.write(buffer,0,length);  
//              }  
//              out.flush();  
//              out.close();  
//              in.close();  
                  
                //使用FileItem提供的方法,方便的输出  
                item.write(new File(path+"/"+fileName));  
                  
            }  
        }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        request.getRequestDispatcher("success.jsp").forward(request, response);  
    }  
 

3、success.jsp

view plaincopy to clipboardprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">  
      
    <title>My JSP 'success.jsp' starting page</title>  
      
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!--  
    <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">  
    -->  
 
  </head>  
    
  <body>  
   username:${username }<br>  
   password:${password }<br>  
   file1:${file1 }<br>  
   file2:${file2 }<br>  
     
     
     
  </body>  
</html> 

4、web.xml

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"   
    xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  <servlet>  
    <servlet-name>UploadServlet</servlet-name>  
    <servlet-class>com.fileupload.servlet.UploadServlet</servlet-class>  
  </servlet>  
 
  <servlet-mapping>  
    <servlet-name>UploadServlet</servlet-name>  
    <url-pattern>/UploadServlet</url-pattern>  
  </servlet-mapping>  
  <welcome-file-list>  
    <welcome-file>index.jsp</welcome-file>  
  </welcome-file-list>  
</web-app>  
 

二:下载:

下载文件用一个Servlet完成:

view plaincopy to clipboardprint?
response.setContentType("text/html;charset=UTF-8");  
 
        request.setCharacterEncoding("UTF-8");     
 
        PrintWriter out = response.getWriter();  
 
        Long id=Long.valueOf(request.getParameter("id"));  
 
        FileInfo fileInfo=fileDAO.find(id);  
 
response.setContentType("application/x-msdownload;");  
 
//此行代码是防止中文乱码的关键!!  
 
            response.setHeader("Content-disposition","attachment; filename="+new String(fileInfo.getName().getBytes("gb2312"),"iso8859-1"));  
 
       BufferedInputStream bis=new BufferedInputStream(new FileInputStream(fileInfo.getPath()));  
 
       BufferedOutputStream bos=new BufferedOutputStream(response.getOutputStream());  
 
       //新建一个2048字节的缓冲区  
 
       byte[] buff=new byte[2048];  
 
       int bytesRead;  
 
       while((bytesRead=bis.read(buff, 0, buff.length))!=-1)  
 
       {  
 
            bos.write(buff);  
 
       }  
 
        if (bis != null)  
 
                bis.close();  
 
            if (bos != null)  
 
                bos.close();    
 
    }  

 

分享到:
评论

相关推荐

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

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

    commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar

    Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的多部分文件上传请求。在Web应用程序中,它允许用户上传文件到服务器,这对于处理用户提交的图片、文档或其他类型的数据至关重要。 描述中提及的...

    commons-fileupload组件上传问题

    `commons-fileupload`组件是Apache Commons项目中的一个子项目,主要负责处理HTTP协议下的文件上传功能。在Web应用中,用户可能需要上传图片、文档等文件,这时`commons-fileupload`就发挥了重要作用。本篇文章将...

    commons-fileupload实现文件上传下载

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

    commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar jar 文件

    commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar jar 文件。 commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 案例上传: http://hi.baidu.com/lichao77821/blog commons-fileupload-1.2.1.jar和commons-...

    commons-fileupload-1.3.3.jar和commons-io-2.6.jar

    在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    `commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...

    commons-fileupload-1.3.jar和commons-io-1.2.jar.zip

    Apache Commons FileUpload和Commons IO是两个非常重要的库,它们为Java提供了强大的文件上传和处理能力。在这个场景中,我们关注的是"commons-fileupload-1.3.jar"和"commons-io-1.2.jar"这两个文件,它们被打包在...

    文件上传两个jar包commons-fileupload-1.3.1和commons-io-2.4

    在这个场景中,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 是两个至关重要的库,它们提供了强大的文件上传支持。 `commons-fileupload-1.3.1.jar` 是Apache Commons FileUpload项目的实现,这是一个...

    commons-fileupload-1.2.1.jar与commons-io-1.3.2.jar

    在处理文件上传时,`commons-fileupload`可能会依赖`commons-io`来完成一些底层的文件操作,比如读写文件、复制文件、检查文件是否存在等。`1.3.2`同样表示这个库的一个特定版本,它可能包含了更多的功能和改进。 ...

    commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

    Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传的两个重要库。它们为开发者提供了强大而灵活的工具,使得在Web应用中处理文件上传变得简单易行。 `commons-fileupload-1.2.1.jar`是Apache ...

    commons-fileupload及源码

    总结起来,Apache Commons FileUpload是一个强大的、高度可配置的文件上传组件,它简化了Java Web应用中处理文件上传的复杂性。通过结合使用`commons-fileupload-1.3.1.jar`和`commons-fileupload-1.3.1-sources.jar...

    commons-fileupload.rar;包括commons-fileupload-1.3.1-bin和commons-io-2.4

    而`commons-io-2.4`是Apache Commons IO库的2.4版本,它是处理输入/输出操作的工具集,与FileUpload配合处理文件上传时,常被用到。 文件上传在Web应用中的实现并不直接内置在Servlet API中,因此,`commons-...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    -下载后解压zip包,将commons-fileupload-1.1.1.jar,和commons-io-1.2.jar(这里我们用的是更新的版本,但是用法是一样的)复制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目录不存在请自建目录。 新建一个...

    commons-fileupload-1.2.2.jar和commons-io-2.4.jar包

    总之,`commons-fileupload-1.2.2.jar`和`commons-io-2.4.jar`是Java Web开发中处理文件上传和下载不可或缺的工具。尽管它们的版本可能不是最新的,但依然能提供可靠的功能,并且在很多现有的系统中广泛使用。理解并...

    commons-fileupload.jar和commons-io.jar

    Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...

    commons-fileupload文件上传实例代码

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

    commons-fileupload-1.3.2.jar和commons-io-2.5.jar

    Commons FileUpload和Commons IO是Java开发中两个非常重要的库,尤其在处理文件上传功能时。这两个库由Apache软件基金会维护,是许多Java Web应用程序的标准组成部分。 `commons-fileupload-1.3.2.jar`是Apache ...

    commons-fileupload-1.2.1.jar 和commons-io-1.4.jar

    Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传的两个重要库,它们在Web应用中被广泛使用。这两个库分别提供了不同的功能,但在处理文件上传时常常一起使用。 `commons-fileupload-1.2.1....

    commons-fileupload-1.2.2-bin.zip

    总的来说,Apache Commons FileUpload库是Java开发人员处理文件上传问题的强大工具,它提供了一套完整的解决方案,包括解析请求、存储文件、错误处理和安全控制等。通过正确使用这个库,开发者可以避免手动处理复杂...

Global site tag (gtag.js) - Google Analytics