springMVC实现文件上传下载
上传文件和下载文件是个常用的技能,在哪里开发几乎都能遇见,而所有的上传控件各不相同,插件很多,后台也有很多,这里我只尝试过这个方法觉的还够简洁。具体如下实现:
1、spring-mvc.xml配置 添加如下,下划线的是关键
- <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:websocket="http://www.springframework.org/schema/websocket"
- xsi:schemaLocation="
- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
- <!-- 自动扫描且只扫描@Controller -->
- <context:component-scan base-package="com.oasis.wyvern" use-default-filters="false">
- <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
- <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
- </context:component-scan>
- <context:annotation-config/>
- <context:component-scan base-package="com.oasis.wyvern.res.controller"/>
- <bean id="ignorTypeInfoJacksonAnnotationIntrospector" class="com.oasis.wyvern.res.utils.jackson.JsonMapper.IgnorTypeInfoJacksonAnnotationIntrospector">
- </bean>
- <mvc:annotation-driven>
- <mvc:message-converters register-defaults="true">
- <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- <property name="objectMapper">
- <bean class="com.fasterxml.jackson.databind.ObjectMapper">
- <property name="serializationInclusion">
- <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
- </property>
- <property name="annotationIntrospector" ref="ignorTypeInfoJacksonAnnotationIntrospector"/>
- </bean>
- </property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
- <!--websocket 配置-->
- <bean id="websocket" class="com.oasis.wyvern.res.controller.websocket.WebsocketEndPoint"/>
- <websocket:handlers allowed-origins="*">
- <websocket:mapping path="/websocket" handler="websocket"/>
- <websocket:handshake-interceptors>
- <bean class="com.oasis.wyvern.res.controller.websocket.HandshakeInterceptor"/>
- </websocket:handshake-interceptors>
- </websocket:handlers>
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/views/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <property name="defaultEncoding" value="UTF-8" />
- <property name="maxUploadSize" value="104857600"/>
- <property name="maxInMemorySize" value="4096"/>
- </bean>
- <!-- 处理所有的无RequestMapping和静态内容的URL -->
- <mvc:default-servlet-handler/>
- <!-- 定义无需Controller的url<->view直接映射 -->
- <mvc:view-controller path="/core/404" view-name="/core/404"/>
- <mvc:view-controller path="/core/refresh" view-name="/core/refresh"/>
- <mvc:view-controller path="/core/error" view-name="/core/error"/>
- <!--<mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="com.oasis.crm.controller.ziwei.core.formtoken.FormTokenInterceptor"/>
- </mvc:interceptor>
- </mvc:interceptors>-->
- <!-- Shiro 注解AOP -->
- <!-- Enable Shiro Annotations for Spring-configured beans. Only run after -->
- <!-- the lifecycleBeanProcessor has run: -->
- <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
- <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
- <property name="securityManager" ref="securityManager"/>
- </bean>
- </beans>
2、controller上传
- /**
- * 创建文件
- * @return
- */
- @RequestMapping(CREATE) //ajax请求的url
- @ResponseBody
- public PackVo<Boolean> createAttachment(MultipartFile file ){
- String uuid = UuidUtils.getUUID();
- attachmentService.createAttachment(file,uuid);
- PackVo<Boolean> packVo = new PackVo<>();
- packVo.setVo(Boolean.TRUE);
- packVo.setUdf2(uuid);
- return packVo; //controller返回值可看配置 可直接换为String
- }
3、文件上传后处理保存在服务器,或hbase
- private Attachment generateAttachment(MultipartFile file, String uuid) throws IllegalStateException, IOException {
- Calendar calendar = Calendar.getInstance();
- String toMonth = DateUtil.dateFormat(calendar.getTime(), "yyyyMM");
- String toDay = DateUtil.dateFormat(calendar.getTime(), "yyyyMMdd");
- toDay = toDay.substring(6);
- String path = "d:/attachment/" + toMonth + "/" + toDay + "/";
- String myFileName = file.getOriginalFilename();
- // String noPostfixFileName = myFileName.substring(0,myFileName.indexOf("."));
- FileManageUtil.makeDirectory(path);
- path += myFileName;
- File localFile = new File(path);
- file.transferTo(localFile);
- Attachment attachment = new Attachment();
- attachment.setName(myFileName);
- attachment.setAttachmentUrl(path);
- attachment.setFileSize(Float.parseFloat(file.getSize()+""));
- attachment.setUuid(uuid);
- return attachment;
- }
二、1、文件下载
- @RequestMapping(value=DOWNLOAD)
- public ResponseEntity<byte[]> testResponseEntity(String realName,String path) throws IOException {
- byte[] body = null;
- File f = new File(path);
- InputStream in = new FileInputStream(f);
- body = new byte[in.available()];
- in.read(body);
- in.close();
- HttpHeaders headers = new HttpHeaders();
- //响应头的名字和响应头的值
- headers.add("Content-Disposition", "attachment;filename="+new String(realName.getBytes("UTF-8"),"iso-8859-1"));//解决文名称中文乱码
- HttpStatus statusCode = HttpStatus.OK;
- ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
- return response;
- }
2、前台实现下载,上传就略去了,reactjs写法
- return (
- <div>
- {
- this.state.initialObj.attachmentVoList.map((attachment)=> {
- return (
- <div key={attachment.id} className="attachment-list">
- <a>{attachment.name} </a>
- <a href={Remote.cert.download+'?path='+attachment.attachmentUrl+'&realName='+attachment.name} >下载 </a>
- <span className="ant-divider" />
- <Popconfirm title="您确定删除吗?" onConfirm={this.deleteData.bind(this, attachment.id)}>
- <a >删除</a>
- </Popconfirm>
- </div>
- )
- })
- }
- </div>
- )
springMVC实现文件上传下载的更多相关文章
- SSM框架-SpringMVC 实例文件上传下载
一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...
- 14.SpringMVC之文件上传下载
SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...
- SpringMVC的文件上传下载,异常处理,拦截器的小总结
文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...
- SpringMVC异步文件上传下载
首先了解一下File的构造方法: File(String pathname):根据一个路径得到File对象 File(String parent,String child):根据一个目录和一个子文件/ ...
- SpringMVC文件上传下载(单文件、多文件)
前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...
- SpringMVC文件上传下载
在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...
- 使用springMVC实现文件上传和下载之环境配置与上传
最近的项目中用到了文件的上传和下载功能,任务分配给了其他的同时完成.如今项目结束告一段落,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 一. 基础配置: maven导包及配置pom.x ...
- SpringMVC 文件上传下载
目录 文件上传 MultipartFile对象 文件下载 上传下载示例 pom.xml增加 创建uploadForm.jsp 创建uploadForm2.jsp 创建userInfo.jsp spri ...
- springmvc文件上传下载简单实现案例(ssm框架使用)
springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...
随机推荐
- 关于iTunes随机播放和我所不知道的自己
无意中看到这套题,很有意思,自己做了一下. 规则是这样的:打开你的播放器,我的是iTunes,不管是哪个,总之打开最全的那个播放列表,开启随机播放,按顺序把每首歌名写在下面每道题的后面,比如第一首歌是 ...
- 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 只需要于管理员 ...
- django安装配置及测试
django安装之前我们假设你已经安装了python,和mysql(不是必须的):(如果没有google一下挺简单不介绍了)下面直接介绍django的安装配置:到下面连接可以下载www.djangop ...
- (Java 多线程系列)java synchronized详解
synchronized简介 Java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block).同步代码块包括两部分:一个作为锁对象的引用,一个作为由这个锁保护的代码块. ...
- Hadoop Streaming框架学习2
Hadoop Streaming框架学习(二) 1.常用Streaming命令介绍 使用下面的命令运行Streaming MapReduce程序: 1: $HADOOP_HOME/bin/hadoop ...
- 依赖注入(DI)和Ninject
[ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject 本文目录: 1.为什么需要依赖注入 2.什么是依赖注入 3.使用NuGet安装库 4.使用Ninject的一般步骤 5. ...
- C# 对象池的实现
C# 对象池的实现 对象池服务可以减少从头创建每个对象的系统开销.在激活对象时,它从池中提取.在停用对象时,它放回池中,等待下一个请求.我们来看下主线程中,如何与对象池打交道: static void ...
- 完整显示当前日期和时间的JS代码(2007年2月25日星期日正午12:42:48)
代码演示效果为“2007年2月25日星期日正午12:42:48”. 使用方法:将下面的JS代码放到你想要显示的页面中(支持HTML页面),然后在你想要显示时间的位置插入下面的代码即可 <div ...
- 迷你MVVM框架 avalonjs 0.85发布
迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...
- linux php 安装GD库
linux下为php添加GD库的步骤如下: 一.下载 gd-2.0.33.tar.gz http://www.boutell.com/gd/ jpegsrc.v6b.tar.gz http://www ...