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

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结合Apache Commons FileUpload库可以有效地处理大文件的批量上传。通过理解并实践这些代码,你可以为你的Web应用构建一个强大的文件上传系统。记得在实际开发中,还需要考虑安全性、错误...

    java实现文件批量上传

    在Java开发中,文件批量上传是一项常见的功能,尤其在企业级应用中,用户可能需要上传大量数据或文件。本教程将介绍如何利用SWF(Simple Workflow)和EXT库来实现这一功能。SWF是一个用于创建富互联网应用程序的前端...

    java实现批量上传图片

    1. **Servlet与Multipart解析器**:在Java Web开发中,处理文件上传通常使用Servlet,特别是Apache的Commons FileUpload库或Java EE 3.0及以上版本的内置Multipart解析器。这些库能解析HTTP请求中的多部分数据,将...

    Java 批量上传文件实例

    在Java编程领域,批量上传文件是一项常见的功能,尤其在Web应用程序中,如处理用户上传的图片、文档等。本实例将深入探讨如何实现这个功能,包括后端处理和前端交互,以及涉及到的关键技术和工具。 首先,批量上传...

    java upload批量上传文件

    在Java编程环境中,批量上传文件是一项常见的任务,尤其在Web应用程序中,如文件分享平台、云存储服务等。本文将详细讲解如何实现Java中的文件批量上传功能,以及相关的技术要点。 首先,理解“批量上传”意味着一...

    java 批量上传图片

    综上所述,实现“java 批量上传图片”涉及到了Java I/O、多线程、网络通信、文件处理、异常处理等多个方面,开发者需要对这些知识点有深入理解和实践,才能编写出稳定、高效的批量图片上传程序。

    基于Java EE的文件批量上传的设计与实现

    在Java EE平台上,文件批量上传是一项常见的功能,尤其在企业级应用中,如文档管理系统、电商平台等,都需要处理用户上传的大量文件。本设计与实现主要涵盖了以下几个关键知识点: 1. **Servlet与JSP**:Java EE...

    Servlet图片批量上传ajax异步上传

    在图片批量上传的场景中,Servlet充当了服务器端的处理程序,接收前端发送的图片文件,进行存储,并返回相应的结果。 **图片批量上传** 批量上传图片是一种常见的用户交互需求,特别是在社交媒体、电商平台等场景。...

    java文件异步上传

    这种技术尤其在处理大文件或者批量上传时,能够显著提升用户体验,因为它们不会冻结页面,允许用户继续与应用程序交互。在本篇文章中,我们将深入探讨Java实现文件异步上传的核心概念和技术。 首先,异步上传主要...

    java批量图片上传

    在设计批量上传系统时,还要关注用户体验,如进度显示、错误处理和重试机制。前端可以使用Ajax或Fetch API异步提交文件,提供上传进度反馈。如果上传过程中发生错误,可以捕获并处理异常,决定是重新上传还是通知...

    Java大文件上传(1GB,图片,视频,Flash文件,音频文件)

    Java作为一种广泛使用的服务器端编程语言,对于处理大文件上传提供了多种策略和技术。本篇文章将详细探讨Java实现大文件上传的原理、方法及优化策略。 首先,我们需要理解HTTP协议在上传大文件时面临的挑战。标准的...

    java 实现视频上传

    在Java中,可以使用Servlet API来处理文件上传。`Part`接口是Servlet 3.0引入的,用于处理多部分请求(multipart/form-data),这是上传文件的标准格式。你可以创建一个Servlet来接收上传的文件,并将文件保存到...

    java swfupload,上传,图片上传,文件上传,批量上传

    Java中的SWFUpload是一种流行的文件上传工具,尤其适用于处理图片和文件的批量上传。这个工具在Web开发中被广泛使用,因为它提供了用户友好的界面和高效的数据传输能力。SWFUpload是一个基于Flash的组件,它允许用户...

    java 支持 超大上G , 多附件上传

    `java 支持 超大上G , 多附件上传` 这个标题所指的就是Java平台如何处理大容量文件及批量附件的上传功能。在给定的描述中提到了`commons-fileupload-1.2.2`,这是一个非常实用的开源组件,用于处理HTTP协议中的文件...

    java实现多文件异步上传

    ### Java实现多文件异步上传知识点详解 在现代Web应用开发中,文件上传是一个非常常见的需求,尤其是在涉及图片、文档等多媒体数据的应用场景下。为了提高用户体验,异步上传技术得到了广泛的应用。本文将深入探讨...

    swf+java+servlet多文件上传单个进度条显示

    总结来说,"swf+java+servlet多文件上传单个进度条显示"方案是一种传统的多文件上传实现方式,利用Flash的文件处理能力、Java Servlet的服务器端处理以及自定义的前端反馈机制来提供批量文件上传并显示整体进度。...

    java使用uploadify批量上传文件

    在Java开发中,批量上传文件是一项常见的需求,尤其是在大数据处理、文件管理以及用户交互的场景中。Uploadify是一款优秀的前端文件上传插件,版本3.1提供了批量上传功能,极大地提高了用户上传多文件的效率。本文将...

Global site tag (gtag.js) - Google Analytics