`
snake_hand
  • 浏览: 576322 次
社区版块
存档分类
最新评论

java上传处理-Servlet 批量上传大文件

阅读更多

新建类UploadServlet

 

 

Java代码 复制代码
  1. package org.action;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.util.Iterator;   
  6. import java.util.List;   
  7.   
  8. import javax.servlet.ServletException;   
  9. import javax.servlet.http.HttpServlet;   
  10. import javax.servlet.http.HttpServletRequest;   
  11. import javax.servlet.http.HttpServletResponse;   
  12.   
  13. import org.apache.commons.fileupload.FileItem;   
  14. import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
  15. import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  16.   
  17. @SuppressWarnings("unchecked")   
  18. public class UploadServlet extends HttpServlet{   
  19.   
  20.     private static final long serialVersionUID = 1L ;    
  21.   
  22.     @Override  
  23.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)   
  24.             throws ServletException, IOException {   
  25.         doPost(req, resp) ;   
  26.     }   
  27.   
  28.     @Override  
  29.     protected void doPost(HttpServletRequest request, HttpServletResponse response )   
  30.             throws ServletException, IOException {   
  31.         DiskFileItemFactory factory = new DiskFileItemFactory() ;   
  32.         factory.setSizeThreshold( 8192 ) ;   
  33.         String tempPath = request.getSession().getServletContext().getRealPath( "/")   
  34.             + "/upload" ;     
  35.         File file = new File( tempPath ) ;   
  36.         if(!file.isDirectory()){   
  37.             file.mkdirs();   
  38.         }   
  39.         factory.setRepository( file ) ;     
  40.         ServletFileUpload upload = new ServletFileUpload( factory ) ;     
  41.             
  42.         List<FileItem> items;   
  43.         try {   
  44.             items = upload.parseRequest(request);   
  45.             Iterator<FileItem> itr = items.iterator();      
  46.             while (itr.hasNext()) {// 依次处理每个 form field   
  47.                    FileItem item = (FileItem) itr.next();   
  48.                    if(!item.isFormField()){ /* 判断是否为表单控件(非File控件),如果不是表单控件,则上传此文件 */  
  49.                        File savedFile = new File( tempPath ,  item.getName() ) ;     
  50.                        item.write(savedFile) ;   
  51.                    }else{/* 如果是表单控件,则保存其值*/  
  52.                        System.out.println( item.getFieldName() + "-->" + item.getString() ) ;    
  53.                    }   
  54.             }   
  55.         }catch (Exception e){   
  56.             e.printStackTrace() ;    
  57.         }   
  58.     }   
  59.        
  60. }  

在web.xml 中配置:

 

 

 

Html代码 复制代码
  1. <servlet>  
  2.     <servlet-name>upload</servlet-name>  
  3.     <servlet-class>org.action.UploadServlet</servlet-class>  
  4.  </servlet>  
  5.  <servlet-mapping>  
  6.     <servlet-name>upload</servlet-name>  
  7.     <url-pattern>/upload</url-pattern>  
  8.  </servlet-mapping>  
  9.    


页面代码:

 

 

Java代码 复制代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>   
  2. <%   
  3. String path = request.getContextPath();   
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  5. %>   
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  8. <html>   
  9.   <head>   
  10.     <base href="<%=basePath%>">   
  11.        
  12.     <title>My JSP 'index.jsp' starting page</title>   
  13.     <meta http-equiv="pragma" content="no-cache">   
  14.     <meta http-equiv="cache-control" content="no-cache">   
  15.     <meta http-equiv="expires" content="0">       
  16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   
  17.     <meta http-equiv="description" content="This is my page">   
  18.   </head>   
  19.      
  20.   <body>   
  21.         <form action="<%=basePath %>upload" method="post" enctype="multipart/form-data">   
  22.             <input type="file" name="file"/>   
  23.             <input value="name" name="name" type="text" />   
  24.             <input type="submit"/>   
  25.         </form>   
  26.   </body>   
  27. </html>  


 

依赖的jar包,commons-fileupload-1.1.jar 和commons-io-1.1.jar

8
16
分享到:
评论
16 楼 覃永波 2012-10-15  
引用
引用
[img][/img][flash=200,200][/flash][/i][i][b][/b]            
15 楼 ccccccc2003 2012-08-16  
wm920 写道
采用多线程进行分块上传操作。就可以解决内村溢出问题.呵呵


我在生产环境上就遇到了内存撑爆的情况,假设2台应用,每台2G内存,分布式,请求不定向到哪一台机器,一个文件500M,4个人并发请求,tomcat多线程处理请求么,首先tomcat会把这些上传的文件,缓存成临时文件在自己的temp文件夹下,因此当第5个人来的时候,你应用的内存就爆了一台机器。原理就是这样,浏览器B,接受文件转发给flash,flash上传文件到tomcat,你的web容器。然后当都传完的时候,才进入你的代码web层,因此,你无论在代码里做异步线程池也好,当在你的web层代码处理前,你的应用就爆掉了。
14 楼 activexme 2012-06-27  
liguocai2009 写道
wm920 写道
采用多线程进行分块上传操作。就可以解决内村溢出问题.呵呵

能详细讲解下方案么?应该是要前后台结合的吧。
楼主的文章一句说明都没有...不觉得有什么特别的处理

试试Xproer.HttpUploader4这个插件。现在大文件上传一般都是用插件来搞,比如QQ邮箱,DBank网盘,115网盘等。
插件介绍:http://www.cnblogs.com/xproer/archive/2012/02/17/2355440.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
文件MD5值计算进度:

文件MD5值计算完毕

服务器根据MD5检测是否存在相同文件

续传文件

从服务器加载文件列表

文件上传中

文件上传完毕

上传文件夹

与Discuz!X2整合-后台安装断点续传控件

与Discuz!X2整合-后台启用断点续传控件

与Discuz!X2整合-后台断点续传控件启用成功

与Discuz!X2整合-前台发帖页面

与Discuz!X2整合-上传

13 楼 122829827 2012-06-26  
w156445045 写道
稍微大点的文件,你服务器就受不了,生产上是不会用你写的这种代码的~

生产上的代码是怎么样的呢?
感觉这段代码是用在注册头像上的。。。
12 楼 lsjinpeng 2012-06-26  
mark 一下回头看看
11 楼 w156445045 2012-06-26  
稍微大点的文件,你服务器就受不了,生产上是不会用你写的这种代码的~
10 楼 122829827 2012-06-26  

学习先
9 楼 ChineseThink 2012-06-26  
8 楼 xpp02 2012-06-25  
会撑爆内存的。http来传输不是根本之道
7 楼 aijuans 2012-06-25  
确实是简化了的情况
6 楼 liguocai2009 2012-06-25  
wm920 写道
采用多线程进行分块上传操作。就可以解决内村溢出问题.呵呵

能详细讲解下方案么?应该是要前后台结合的吧。
楼主的文章一句说明都没有...不觉得有什么特别的处理
5 楼 wm920 2012-06-25  
采用多线程进行分块上传操作。就可以解决内村溢出问题.呵呵
4 楼 wutao8818 2012-06-25  
确实是简化了的情况
3 楼 paskaa 2012-06-25  
很好,这文章最近我需要
2 楼 aijuans1 2012-06-25  
1 楼 ccccccc2003 2012-06-25  
并发下,会撑爆内存的。http来传输不是根本之道。

相关推荐

    java上传处理-Servlet_批量上传大文件

    java上传处理-Servlet_批量上传大文件 依赖的jar包,commons-fileupload-1.1.jar 和commons-io-1.1.jar 列子

    java网站开发结合jsp写的上传以及批量上传文件代码

    // 3:设置允许上传文件的大小 .这里是3m su.setMaxFileSize(3 * 1024 * 1024); // 4:初始化,接受页面传递过来的请求 su.initialize(getServletConfig(), request, response); // 5:上传 su....

    swfupload java批量上传文件

    研究了段时间java servlet做为后台处理的swfupload,其中解决了向后台传送数据、动态产生上传文件表格等功能,由于时间问题session问题未加入进去,可单独与我联系再详细解释。希望能给朋友们提供点帮助!

    修改好的移动端android和服务端java上传文件程序

    修改好的移动端android和服务端java上传文件程序,赋带有文档说明,支持批量上传文件和带参数,服务端用的servlet3.0

    wangeditor批量上传图片

    使用jsp+servlet,同时可以批量上传图片又可以防止Tomcat重启后图片消失

    FancyUpload批量上传文件

    Ajax+Flash多文件上传是一个开源的上传组件,名称是FancyUpload,其官方网址是:http://digitarald.de/project/fancyupload/。这个组件仅仅是客户端的应用组件,即与任何服务器端的技术没有关系,服务器端可以采用...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    HttpURLConnection servlet 多文件参数 断点上传

    NULL 博文链接:https://dreamoftch.iteye.com/blog/1860289

    Servlet上传页面图片 并存入Mysql数据库

    读取过程 硬盘文件项工厂 Servlet文件上传 文件项迭代器 文件项流 输入流 连接数据库 加载驱动类 获取connection对象 拼写预处理语句,生成预处理 对象preparedStatement 执行  package Servlet;  import java....

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    MultipartRequest多文件上传

    MultipartRequest 批量上传文件,进行了一下修改 1、自定义文件上传路径 2、自定义文件名称 3、返回文件后缀 4、返回文件存储路径

Global site tag (gtag.js) - Google Analytics