- 浏览: 675286 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
多文件上传 by MultipartFile and Multiple
最近的一个项目中,需要用到一个多文件上传,项目组长推荐了一个 jQuery Multiple File Upload Plugin ( http://www.fyneworks.com/jquery/multiple-file-upload/ )让我调研一下,简单研究了一下,感觉还不错,就拿出来晒晒。
首先我这里因为项目中使用的是 SpringMVC ,所以这边后台我就直接使用 Spring 中的 MultipartFile 中进行处理。
我们在 multifile 中可以很容易的发现如何使用,这里就简单说说了,首先在页面上我们需要有这样几行标签代码
<!-- 注意这里的attach名字为固定,如果要控制上传的格式,则追加accept="doc|txt|jsp" 最大上传量maxlength="3" --> <input type="file" name="attach" id="multiFileId" class=" input_txt"/> <div id="multiFileId-list"></div>
然后在该页面中引入相关的JS和CSS
<script src="./js/multifile/jquery.MetaData.js" type="text/javascript"></script> <script src="./js/multifile/jquery.MultiFile.js" type="text/javascript"></script> <script src="./js/multifile/jquery.blockUI.js" type="text/javascript"></script> <script src="./js/multifile/documentation.js" type="text/javascript"></script> <link href="./js/multifile/documentation.css" type="text/css" rel="stylesheet" />
然后通过js和设置刚刚写入的标签
<script type="text/javascript"> $(function() { //加载多文件上传的JS $('#multiFileId').MultiFile( { list : '#multiFileId-list', STRING : { remove : '<img src="http://www.fyneworks.com/i/bin.gif" height="16" width="16" alt="x"/>' } }); }); </script>
当然,上面的这段 JS 以及上面的 HTML 标签,我们可以根据实际的情况参考官网上的 Demo 上说明的属性进行设置。
Ok ,前台我们使用这个插件的地方基本就 ok 了,下面我们需要关心的是后台我们如何处理这里上传的多文件进行保存。在调研的过程中我将这一部分简单的写了一个工具类。
首先在 Controller 里接收
@RequestMapping(value="/uploadFile/upload.ac", method = RequestMethod.POST) public String uploadFile(HttpServletRequest request, HttpServletResponse response) { List<MultipartFile> multipartFiles = UploadHelper.getFileSet(request, 1024 * 20, null); String path = "D:" + File.separator; if (multipartFiles.size() == 0) { // TODO 给出提示,不允许没选择文件点击上传 } for (MultipartFile multipartFile : multipartFiles) { try { String filePath = UploadHelper.uploadFile(multipartFile, path); System.out.println(filePath); } catch (Exception e) { e.printStackTrace(); } // 拿到的imgPath就是图片的相对于contextPath的存储路径了 } return null; }
UploadHelper.java
package org.elongcom.common; import java.io.File; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; /** * @author xdwang * * @create 2012-11-19 下午6:24:03 * * @email:xdwangiflytek@gmail.com * * @description 上传帮助类 * */ public class UploadHelper { /** * @descrption 根据HttpServletRequest对象获取MultipartFile集合 * @author xdwang * @create 2012-11-19下午5:11:41 * @param request * @param maxLength * 文件最大限制 * @param allowExtName * 不允许上传的文件扩展名 * @return MultipartFile集合 */ public static List<MultipartFile> getFileSet(HttpServletRequest request, long maxLength, String[] allowExtName) { MultipartHttpServletRequest multipartRequest = null; try { multipartRequest = (MultipartHttpServletRequest) request; } catch (Exception e) { return new LinkedList<MultipartFile>(); } List<MultipartFile> files = new LinkedList<MultipartFile>(); files = multipartRequest.getFiles("attach"); // 移除不符合条件的 for (int i = 0; i < files.size(); i++) { if (!validateFile(files.get(i), maxLength, allowExtName)) { files.remove(files.get(i)); if (files.size() == 0) { return files; } } } return files; } /** * @descrption 保存文件 * @author xdwang * @create 2012-11-19下午4:17:36 * @param file * MultipartFile对象 * @param path * 保存路径,如“D:\\File\\” * @return 保存的全路径 如“D:\\File\\2345678.txt” * @throws Exception * 文件保存失败 */ public static String uploadFile(MultipartFile file, String path) throws Exception { String filename = file.getOriginalFilename(); String extName = filename.substring(filename.lastIndexOf(".")) .toLowerCase(); String lastFileName = UUID.randomUUID().toString() + extName; if (!path.endsWith(File.separator)) { path = path + File.separator; } File temp = new File(path); if (!temp.isDirectory()) { temp.mkdir(); } // 图片存储的全路径 String fileFullPath = path + lastFileName; FileCopyUtils.copy(file.getBytes(), new File(fileFullPath)); return fileFullPath; } /** * @descrption 验证文件格式,这里主要验证后缀名 * @author xdwang * @create 2012-11-19下午4:08:12 * @param file * MultipartFile对象 * @param maxLength * 文件最大限制 * @param allowExtName * 不允许上传的文件扩展名 * @return 文件格式是否合法 */ private static boolean validateFile(MultipartFile file, long maxLength, String[] allowExtName) { if (file.getSize() < 0 || file.getSize() > maxLength) return false; String filename = file.getOriginalFilename(); // 处理不选择文件点击上传时,也会有MultipartFile对象,在此进行过滤 if (filename == "") { return false; } String extName = filename.substring(filename.lastIndexOf(".")) .toLowerCase(); if (allowExtName == null || allowExtName.length == 0 || Arrays.binarySearch(allowExtName, extName) != -1) { return true; } else { return false; } } }
这里需要多说一点的是,表单提交时如果有文件进行上传时,需要在表单上设置enctype="multipart/form-data",否则上面的 multipartRequest = (MultipartHttpServletRequest) request;进行强转时会报错。
Ok,收工。
- multiple-file-upload.zip (809.4 KB)
- 下载次数: 167
评论
2 楼
u013107014
2016-07-27
multipartRequest.getFiles("attach"); 一直为0
1 楼
love_zongming
2013-07-11
List<MultipartFile> files = new LinkedList<MultipartFile>(); files = multipartRequest.getFiles("attach");
请选择文件: <input type="file" name="attach"/><br/> 请选择文件: <input type="file" name="attach"/><br/>
请问下 , 你页面传递的文件name 是这样子的么?
我在调用multipartRequest.getFiles("attach");这个方法的时候, 没有找到getFiles(),只有getFile(),调用了getFile()方法,会一直报如下错误:
org.springframework.web.multipart.MultipartException: Multiple files for field name [myfiles] found - not supported by MultipartResolver at org.springframework.web.multipart.commons.CommonsFileUploadSupport.parseFileItems(CommonsFileUploadSupport.java:254) at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:166) at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:149) at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1015) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:851) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511) at javax.servlet.http.HttpServlet.service(HttpServlet.java:643) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619)
发表评论
-
log4j xml配置详解
2014-06-18 10:37 1135<?xml version="1.0&qu ... -
06-Spring3 SpEL
2013-09-05 22:01 2836SpEL基础 一、概述 1、概述 Spring表达式 ... -
05-Spring3 AOP F_通知顺序--切面实例化模型--代理机制
2013-09-04 22:05 2206一、通知顺序 如果我们有多个通知想要在同一连接点执行,那 ... -
05-Spring3 AOP E_通知参数
2013-09-04 00:06 1171前边已经学习了声明通知,但如果想获取被被通知方法参数并传递 ... -
05-Spring3 AOP D_AspectJ切入点语法
2013-09-03 20:57 766一、Spring AOP支持的AspectJ切入点指示符 ... -
05-Spring3 AOP C_基于@AspectJ的AOP
2013-08-13 08:39 1759Spring除了支持Schema方 ... -
05-Spring3 AOP B_基于Schema的AOP
2013-08-09 18:37 1173前面我们对Spring AOP有了个入门,今天来整理 ... -
05-Spring3 AOP A_入门
2013-08-08 19:53 1221前面整理了IOC,今 ... -
04-Spring3 资源
2013-08-07 20:20 1363概述 在日常程序开发中,处理外部资源是很繁琐的事情 ... -
03-Spring3 依赖注入(DI)D_Bean作用域【转】
2013-08-06 20:40 1142Bean作用域 什么是作用域呢? ... -
03-Spring3 依赖注入(DI)C_更多DI知识【转】
2013-08-06 18:13 1318一、延迟初始化Bean ... -
03-Spring3 依赖注入(DI)B_循环依赖【转】
2013-08-05 20:23 1379循环依赖即循环引用,就是两个或多个Bean相互之间的 ... -
03-Spring3 依赖注入(DI)A_配置使用【转】
2013-08-05 18:34 1376前面我们说了简单的实例化Bean(Spring IO ... -
test
2013-07-29 09:16 0private static CacheImpl insta ... -
使用Spring的Mail组件发送邮件
2013-04-28 23:22 6087明天就回家,晚上也没什么事情,弄个Sp ... -
02-Spring3 IoC
2013-04-01 20:29 1496一、IoC IoC—Inversion of Cont ... -
01-Spring3 概述
2013-03-29 10:15 1265Spring,SSH中内容最丰 ... -
布局框架-SiteMesh
2012-11-30 08:57 2588最近在一个项目中使用 ... -
Servlet
2012-12-07 08:36 1546一、认识 Servlet : ... -
连接池
2012-12-10 08:42 1445...
相关推荐
总结来说,`MultipartFile`是Spring框架处理多文件上传的核心工具,结合前端的文件选择和`webuploader`等库可以实现断点续传功能,提升用户体验。在后台处理文件时,通常需要先执行数据库操作,确保数据一致性,然后...
本知识点主要聚焦于如何在Android中实现单文件和多文件的上传,以及后台使用`MultipartFile`类进行处理的方式。`MultipartFile`是Spring框架中的一个接口,常用于处理HTTP请求中的多部分(multipart)数据,包括文件...
在Java开发中,MultipartFile是Spring框架提供的一种用于处理上传文件的接口,它使得开发者能够方便地接收HTTP请求中的多部分(Multipart)数据,其中包括图片的上传。在本场景下,我们将探讨如何实现多图片上传的功能...
总结来说,实现Spring MVC的多文件上传需要结合Spring MVC的MultipartFile接口、Apache Commons的FileUpload库以及适当的配置和业务逻辑。理解这些知识点,你就可以构建一个稳定且灵活的多文件上传功能。注意在实际...
本主题“基于nio实现的多文件上传源码”探讨的是如何利用Java NIO来实现高效的多文件上传功能,尤其对于小文件数量较大的情况。 首先,理解NIO的基本概念是必要的。NIO中的“非阻塞”意味着当数据不可用时,读写...
在Web开发中,我们经常需要处理用户上传的文件,MultipartFile是Spring框架提供的一种处理文件上传的接口,它使得我们可以方便地接收和处理上传的Excel文件。下面我们将深入探讨如何使用Java POI和MultipartFile来...
在Java JSP环境中,处理多文件上传通常会涉及Servlet和MultipartFile接口。Spring框架提供了便捷的支持,可以使用`@RequestParam("files[]") MultipartFile[] files`来接收上传的文件数组。每个`MultipartFile`对象...
请注意,这只是一个基础的FTP上传示例,实际使用时可能需要处理更多细节,如错误处理、文件重命名、目录创建等。 综上所述,使用SpringMVC和`MultipartFile`可以方便地处理文件上传,而结合FTP服务则可以实现在本地...
本知识点将详细介绍如何利用OkHttp实现多文件上传,并结合服务器端代码来理解整个流程。 一、OkHttp简介 OkHttp是由Square公司开发的一个HTTP客户端库,它提供了一个简单、高效且强大的接口来处理网络请求。OkHttp...
在本文中,将详细介绍如何在Java原生服务器中接收上传的文件,而不需要使用Spring框架中常用的MultipartFile类。这种情况通常出现在需要与现有上传组件兼容或解决与其他上传模块的冲突时。首先,将介绍如何通过注释...
Java 利用 MultipartFile 实现上传多份文件的代码 Java 中实现上传多份文件的代码是非常实用的技术,以下是关于 MultipartFile 的知识点: MultipartFile 概念 MultipartFile 是 Spring 框架中提供的一个接口,...
使用httpPost java实现文件上传转发。 使用MultipartFile[] files,@RequestParam Map,Object> map 接收
多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...
Spring `MultipartFile` 是Spring MVC框架为处理HTTP多部分请求(即文件上传)而设计的一个接口。它允许开发者在后端服务中接收、处理和存储上传的文件。通过注解驱动的方式,我们可以非常便捷地在控制器方法中处理...
本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及图片上传的实现细节。 ### 1. 文件上传基础 #### 1.1 获取文件 在Android中,用户可以选择文件,通常通过Intent的ACTION_PICK或者ACTION_GET_...
- 为了处理多文件上传,需要将`<input type="file">`改为`<input type="file" multiple>`,允许用户选择多个文件。 - 配置Spring MVC的`CommonsMultipartResolver`解析器以支持文件上传,需要在`web.xml`或Spring...
在SpringMVC框架中,处理文件上传通常涉及`MultipartFile`接口,它是Spring提供的一个用于处理上传文件的数据类型。当用户通过HTTP请求上传文件时,SpringMVC会将这些文件封装成`MultipartFile`对象。然而,在实际...
在Java Web开发中,我们经常会遇到需要处理上传文件的情况,其中`MultipartFile`是Spring MVC框架提供的一种用于处理文件上传的接口。然而,在实际操作中,我们可能需要将已有的`File`对象转换为`MultipartFile`,...
在这个“SpringMVC文件上传,多文件上传实例”中,我们将深入探讨如何在SpringMVC环境中实现文件上传功能,包括单个文件上传以及多个文件的批量上传。 1. **文件上传原理**: 文件上传是通过HTTP协议的POST请求来...
1. **SpringMVC的文件上传处理**:在Controller层,我们可以定义一个方法,接收`MultipartFile[] files`参数,这样就可以处理多文件上传。每个`MultipartFile`对象代表一个上传的文件,可以获取文件名、类型、大小等...