上传文件和下载文件是个常用的技能,在哪里开发几乎都能遇见,而所有的上传控件各不相同,插件很多,后台也有很多,这里我只尝试过这个方法觉的还够简洁。具体如下实现:

1、spring-mvc.xml配置  添加如下,下划线的是关键

  1. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:websocket="http://www.springframework.org/schema/websocket"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
  8. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd
  11. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  12.  
  13. <!-- 自动扫描且只扫描@Controller -->
  14. <context:component-scan base-package="com.oasis.wyvern" use-default-filters="false">
  15. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  16. <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
  17. </context:component-scan>
  18. <context:annotation-config/>
  19. <context:component-scan base-package="com.oasis.wyvern.res.controller"/>
  20. <bean id="ignorTypeInfoJacksonAnnotationIntrospector" class="com.oasis.wyvern.res.utils.jackson.JsonMapper.IgnorTypeInfoJacksonAnnotationIntrospector">
  21. </bean>
  22.  
  23. <mvc:annotation-driven>
  24. <mvc:message-converters register-defaults="true">
  25. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  26. <property name="objectMapper">
  27. <bean class="com.fasterxml.jackson.databind.ObjectMapper">
  28. <property name="serializationInclusion">
  29. <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
  30. </property>
  31. <property name="annotationIntrospector" ref="ignorTypeInfoJacksonAnnotationIntrospector"/>
  32. </bean>
  33. </property>
  34. </bean>
  35. </mvc:message-converters>
  36. </mvc:annotation-driven>
  37.  
  38. <!--websocket 配置-->
  39. <bean id="websocket" class="com.oasis.wyvern.res.controller.websocket.WebsocketEndPoint"/>
  40. <websocket:handlers allowed-origins="*">
  41. <websocket:mapping path="/websocket" handler="websocket"/>
  42. <websocket:handshake-interceptors>
  43. <bean class="com.oasis.wyvern.res.controller.websocket.HandshakeInterceptor"/>
  44. </websocket:handshake-interceptors>
  45. </websocket:handlers>
  46.  
  47. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  48. <property name="prefix" value="/WEB-INF/views/"/>
  49. <property name="suffix" value=".jsp"/>
  50. </bean>
  51.  
  52. <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
  53. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  54. <property name="defaultEncoding" value="UTF-8" />
  55. <property name="maxUploadSize" value="104857600"/>
  56. <property name="maxInMemorySize" value="4096"/>
  57. </bean>

  58. <!-- 处理所有的无RequestMapping和静态内容的URL -->
  59. <mvc:default-servlet-handler/>
  60. <!-- 定义无需Controller的url<->view直接映射 -->
  61. <mvc:view-controller path="/core/404" view-name="/core/404"/>
  62. <mvc:view-controller path="/core/refresh" view-name="/core/refresh"/>
  63. <mvc:view-controller path="/core/error" view-name="/core/error"/>
  64.  
  65. <!--<mvc:interceptors>
  66. <mvc:interceptor>
  67. <mvc:mapping path="/**"/>
  68. <bean class="com.oasis.crm.controller.ziwei.core.formtoken.FormTokenInterceptor"/>
  69. </mvc:interceptor>
  70. </mvc:interceptors>-->
  71.  
  72. <!-- Shiro 注解AOP -->
  73. <!-- Enable Shiro Annotations for Spring-configured beans. Only run after -->
  74. <!-- the lifecycleBeanProcessor has run: -->
  75. <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
  76. <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
  77. <property name="securityManager" ref="securityManager"/>
  78. </bean>
  79.  
  80. </beans>

2、controller上传      

  1. /**
  2. * 创建文件
  3. * @return
  4. */
  5. @RequestMapping(CREATE) //ajax请求的url
  6. @ResponseBody
  7. public PackVo<Boolean> createAttachment(MultipartFile file ){
  8. String uuid = UuidUtils.getUUID();
  9. attachmentService.createAttachment(file,uuid);
  10. PackVo<Boolean> packVo = new PackVo<>();
  11. packVo.setVo(Boolean.TRUE);
  12. packVo.setUdf2(uuid);
  13. return packVo; //controller返回值可看配置 可直接换为String
  14. }

3、文件上传后处理保存在服务器,或hbase

  1. private Attachment generateAttachment(MultipartFile file, String uuid) throws IllegalStateException, IOException {
  2. Calendar calendar = Calendar.getInstance();
  3. String toMonth = DateUtil.dateFormat(calendar.getTime(), "yyyyMM");
  4. String toDay = DateUtil.dateFormat(calendar.getTime(), "yyyyMMdd");
  5. toDay = toDay.substring(6);
  6. String path = "d:/attachment/" + toMonth + "/" + toDay + "/";
  7. String myFileName = file.getOriginalFilename();
  8. // String noPostfixFileName = myFileName.substring(0,myFileName.indexOf("."));
  9. FileManageUtil.makeDirectory(path);
  10. path += myFileName;
  11. File localFile = new File(path);
  12. file.transferTo(localFile);
  13. Attachment attachment = new Attachment();
  14. attachment.setName(myFileName);
  15. attachment.setAttachmentUrl(path);
  16. attachment.setFileSize(Float.parseFloat(file.getSize()+""));
  17. attachment.setUuid(uuid);
  18. return attachment;
  19.  
  20. }

二、1、文件下载

  1. @RequestMapping(value=DOWNLOAD)
  2. public ResponseEntity<byte[]> testResponseEntity(String realName,String path) throws IOException {
  3. byte[] body = null;
  4. File f = new File(path);
  5. InputStream in = new FileInputStream(f);
  6. body = new byte[in.available()];
  7. in.read(body);
  8. in.close();
  9. HttpHeaders headers = new HttpHeaders();
  10. //响应头的名字和响应头的值
  11. headers.add("Content-Disposition", "attachment;filename="+new String(realName.getBytes("UTF-8"),"iso-8859-1"));//解决文名称中文乱码
  12. HttpStatus statusCode = HttpStatus.OK;
  13. ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
  14. return response;
  15. }

2、前台实现下载,上传就略去了,reactjs写法

  1. return (
  2. <div>
  3. {
  4. this.state.initialObj.attachmentVoList.map((attachment)=> {
  5. return (
  6. <div key={attachment.id} className="attachment-list">
  7. <a>{attachment.name} </a>&nbsp;&nbsp;&nbsp;
  8. <a href={Remote.cert.download+'?path='+attachment.attachmentUrl+'&realName='+attachment.name} >下载 </a>
  9. <span className="ant-divider" />
  10. <Popconfirm title="您确定删除吗?" onConfirm={this.deleteData.bind(this, attachment.id)}>
  11. <a >删除</a>
  12. </Popconfirm>
  13. </div>
  14. )
  15. })
  16. }
  17.  
  18. </div>
  19. )

springMVC实现文件上传下载的更多相关文章

  1. SSM框架-SpringMVC 实例文件上传下载

    一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...

  2. 14.SpringMVC之文件上传下载

    SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...

  3. SpringMVC的文件上传下载,异常处理,拦截器的小总结

    文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...

  4. SpringMVC异步文件上传下载

    首先了解一下File的构造方法: File(String pathname):根据一个路径得到File对象 File(String parent,String child):根据一个目录和一个子文件/ ...

  5. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  6. SpringMVC文件上传下载

    在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...

  7. 使用springMVC实现文件上传和下载之环境配置与上传

    最近的项目中用到了文件的上传和下载功能,任务分配给了其他的同时完成.如今项目结束告一段落,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 一. 基础配置: maven导包及配置pom.x ...

  8. SpringMVC 文件上传下载

    目录 文件上传 MultipartFile对象 文件下载 上传下载示例 pom.xml增加 创建uploadForm.jsp 创建uploadForm2.jsp 创建userInfo.jsp spri ...

  9. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

随机推荐

  1. 关于iTunes随机播放和我所不知道的自己

    无意中看到这套题,很有意思,自己做了一下. 规则是这样的:打开你的播放器,我的是iTunes,不管是哪个,总之打开最全的那个播放列表,开启随机播放,按顺序把每首歌名写在下面每道题的后面,比如第一首歌是 ...

  2. Apache HttpServer Installing the apache2.2 service <OS 5>拒绝访问. :Failed to open the WinNT service manager

    Installing the apache2.2 service<OS 5>拒绝访问.  :Failed to open the WinNT service manager 只需要于管理员 ...

  3. django安装配置及测试

    django安装之前我们假设你已经安装了python,和mysql(不是必须的):(如果没有google一下挺简单不介绍了)下面直接介绍django的安装配置:到下面连接可以下载www.djangop ...

  4. (Java 多线程系列)java synchronized详解

    synchronized简介 Java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block).同步代码块包括两部分:一个作为锁对象的引用,一个作为由这个锁保护的代码块. ...

  5. Hadoop Streaming框架学习2

    Hadoop Streaming框架学习(二) 1.常用Streaming命令介绍 使用下面的命令运行Streaming MapReduce程序: 1: $HADOOP_HOME/bin/hadoop ...

  6. 依赖注入(DI)和Ninject

    [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject 本文目录: 1.为什么需要依赖注入 2.什么是依赖注入 3.使用NuGet安装库 4.使用Ninject的一般步骤 5. ...

  7. C# 对象池的实现

    C# 对象池的实现 对象池服务可以减少从头创建每个对象的系统开销.在激活对象时,它从池中提取.在停用对象时,它放回池中,等待下一个请求.我们来看下主线程中,如何与对象池打交道: static void ...

  8. 完整显示当前日期和时间的JS代码(2007年2月25日星期日正午12:42:48)

    代码演示效果为“2007年2月25日星期日正午12:42:48”. 使用方法:将下面的JS代码放到你想要显示的页面中(支持HTML页面),然后在你想要显示时间的位置插入下面的代码即可 <div ...

  9. 迷你MVVM框架 avalonjs 0.85发布

    迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...

  10. linux php 安装GD库

    linux下为php添加GD库的步骤如下: 一.下载 gd-2.0.33.tar.gz http://www.boutell.com/gd/ jpegsrc.v6b.tar.gz http://www ...