- 浏览: 663372 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (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 1100<?xml version="1.0&qu ... -
06-Spring3 SpEL
2013-09-05 22:01 2777SpEL基础 一、概述 1、概述 Spring表达式 ... -
05-Spring3 AOP F_通知顺序--切面实例化模型--代理机制
2013-09-04 22:05 2158一、通知顺序 如果我们有多个通知想要在同一连接点执行,那 ... -
05-Spring3 AOP E_通知参数
2013-09-04 00:06 1121前边已经学习了声明通知,但如果想获取被被通知方法参数并传递 ... -
05-Spring3 AOP D_AspectJ切入点语法
2013-09-03 20:57 721一、Spring AOP支持的AspectJ切入点指示符 ... -
05-Spring3 AOP C_基于@AspectJ的AOP
2013-08-13 08:39 1715Spring除了支持Schema方 ... -
05-Spring3 AOP B_基于Schema的AOP
2013-08-09 18:37 1130前面我们对Spring AOP有了个入门,今天来整理 ... -
05-Spring3 AOP A_入门
2013-08-08 19:53 1172前面整理了IOC,今 ... -
04-Spring3 资源
2013-08-07 20:20 1315概述 在日常程序开发中,处理外部资源是很繁琐的事情 ... -
03-Spring3 依赖注入(DI)D_Bean作用域【转】
2013-08-06 20:40 1099Bean作用域 什么是作用域呢? ... -
03-Spring3 依赖注入(DI)C_更多DI知识【转】
2013-08-06 18:13 1276一、延迟初始化Bean ... -
03-Spring3 依赖注入(DI)B_循环依赖【转】
2013-08-05 20:23 1321循环依赖即循环引用,就是两个或多个Bean相互之间的 ... -
03-Spring3 依赖注入(DI)A_配置使用【转】
2013-08-05 18:34 1339前面我们说了简单的实例化Bean(Spring IO ... -
test
2013-07-29 09:16 0private static CacheImpl insta ... -
使用Spring的Mail组件发送邮件
2013-04-28 23:22 6022明天就回家,晚上也没什么事情,弄个Sp ... -
02-Spring3 IoC
2013-04-01 20:29 1442一、IoC IoC—Inversion of Cont ... -
01-Spring3 概述
2013-03-29 10:15 1218Spring,SSH中内容最丰 ... -
布局框架-SiteMesh
2012-11-30 08:57 2547最近在一个项目中使用 ... -
Servlet
2012-12-07 08:36 1499一、认识 Servlet : ... -
连接池
2012-12-10 08:42 1396...
相关推荐
本次带来的是MultipartFile多文件文件上传,可以在sql执行完成,没有出现异常,再将文件保存进我们的服务器,如果出现异常,文件不会上传到我们的服务器
Android上传单文件和多文件(后台使用MultipartFile),博客地址:https://blog.csdn.net/qq_32090185/article/details/86573530
使用httpPost java实现文件上传转发。 使用MultipartFile[] files,@RequestParam Map,Object> map 接收
MultipartFile上传图片(多图片上传)
主要为大家详细介绍了Java原生服务器接收上传文件,不使用MultipartFile类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...
本篇文章主要介绍了SpringMVC使用MultipartFile实现文件的上传,本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的,有兴趣的可以了解一下。
android 通用图片上传,多文件上传,单文件皆可。。
主要介绍了Java利用MultipartFile实现上传多份文件的代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
本资源是用于实现springMVC多文件上传时需要的jar包
java POI 通过MultipartFileExcel文件解析写入数据库
有些软件通过改变文件的扩展名隐藏文件的真实类型。例如,有些游戏的音乐和动画其实是标准的MID和AVI文件,只要把扩展名改回来,就能直接播放。现在编写一个程序,使它从一个配置文件中获得字符串与文件类型的对应表...
主要为大家详细介绍了纯js实现最简单的文件上传功能,后台使用MultipartFile,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
上传文件大小判断上传文件大小判断上传文件大小判断上传文件大小判断上传文件大小判断上传文件大小判断上传文件大小判断上传文件大小判断
File 转 MultipartFile 和需要的maven配置File 转 MultipartFile 和需要的maven配置File 转 MultipartFile 和需要的maven配置
本地生成file文件 MultipartFile转为file,获取时长(毫秒),换算毫秒为时分秒 删除本地的file文件
主要介绍了SpringMVC 上传文件 MultipartFile 转为 File的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java上传文件
Http post请求,接口要求同时上传文件和参数的代码实现
NULL 博文链接:https://paggywong.iteye.com/blog/1022725