Spring MVC 4 文件下载实例(带源码)
来源:互联网 发布:西门子plc tcp端口号 编辑:程序博客网 时间:2024/06/07 01:38
【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】
【翻译 by 明明如月 QQ 605283073】
原文地址:http://websystique.com/springmvc/spring-mvc-4-file-download-example/上一篇:Spring MVC 4 使用常规的fileupload上传文件(带源码)
下一篇:Spring MVC 4使用Servlet 3 MultiPartConfigElement实现文件上传(带源码)
本文将为你展示通过Spring MVC 4实现文件下载。
下载一个文件比较简单,主要包括下面几个步骤.
- 创建下载文件的InputStream(输入流)
找到下载文件类型的
MIME type
.
– 可能是 application/pdf, text/html,application/xml,image/png, ..或者其他类型.在response(HttpServletResponse)中设置
Content-Type 为上面的值
.
response.setContentType(mimeType);设置
Content length
文件长度.
response.setContentLength(file.getLength());//字节长度- 在响应中设置Content-Disposition HEADER
response.setHeader(“Content-Disposition”, “attachment; filename=” + fileName); //With ‘attachement’ File will be downloaded as is. 可能会显示基于浏览器的 ‘文件另存为’对话框.response.setHeader(“Content-Disposition”, “inline; filename=” + fileName);//With ‘inline’ browser will try to display content right into broswer for certain contents(imgages,PDF,text,..). 其他内容文件将直接被下载
- 拷贝 InputStream(输入流)的字节到 response的OutputStream(输出流) .
- 一旦拷贝完成,关闭输入输出流
下面是完整的例子
所用的技术或者软件:
- Spring 4.2.0.RELEASE
- Bootstrap v3.3.2
- Maven 3
- JDK 1.7
- Tomcat 8.0.21
- Eclipse JUNO Service Release 2
项目结构
pom.xml文件声明依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.websystique.springmvc</groupId> <artifactId>Spring4MVCFileDownloadExample</artifactId> <packaging>war</packaging> <version>1.0.0</version> <name>Spring4MVCFileDownloadExample Maven Webapp</name> <properties><springframework.version>4.2.0.RELEASE</springframework.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.4</version><configuration><warSourceDirectory>src/main/webapp</warSourceDirectory><warName>Spring4MVCFileDownloadExample</warName><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></pluginManagement><finalName>Spring4MVCFileDownloadExample</finalName></build></project>
创建控制器
package com.websystique.springmvc.controller;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLConnection;import java.nio.charset.Charset;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.util.FileCopyUtils;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controllerpublic class FileDownloadController {private static final String INTERNAL_FILE="irregular-verbs-list.pdf";private static final String EXTERNAL_FILE_PATH="C:/mytemp/SpringMVCHibernateManyToManyCRUDExample.zip";@RequestMapping(value={"/","/welcome"}, method = RequestMethod.GET)public String getHomePage(ModelMap model) {return "welcome";}/* * Download a file from * - inside project, located in resources folder. * - outside project, located in File system somewhere. */@RequestMapping(value="/download/{type}", method = RequestMethod.GET)public void downloadFile(HttpServletResponse response, @PathVariable("type") String type) throws IOException {File file = null;if(type.equalsIgnoreCase("internal")){ClassLoader classloader = Thread.currentThread().getContextClassLoader();file = new File(classloader.getResource(INTERNAL_FILE).getFile());}else{file = new File(EXTERNAL_FILE_PATH);}if(!file.exists()){String errorMessage = "Sorry. The file you are looking for does not exist";System.out.println(errorMessage);OutputStream outputStream = response.getOutputStream();outputStream.write(errorMessage.getBytes(Charset.forName("UTF-8")));outputStream.close();return;}String mimeType= URLConnection.guessContentTypeFromName(file.getName());if(mimeType==null){System.out.println("mimetype is not detectable, will take default");mimeType = "application/octet-stream";}System.out.println("mimetype : "+mimeType); response.setContentType(mimeType); /* "Content-Disposition : inline" will show viewable types [like images/text/pdf/anything viewable by browser] right on browser while others(zip e.g) will be directly downloaded [may provide save as popup, based on your browser setting.]*/ response.setHeader("Content-Disposition", String.format("inline; filename=\"" + file.getName() +"\"")); /* "Content-Disposition : attachment" will be directly download, may provide save as popup, based on your browser setting*/ //response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName())); response.setContentLength((int)file.length());InputStream inputStream = new BufferedInputStream(new FileInputStream(file)); //Copy bytes from source to destination(outputstream in this example), closes both streams. FileCopyUtils.copy(inputStream, response.getOutputStream());}}
配置
package com.websystique.springmvc.configuration; import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView; @Configuration@EnableWebMvc@ComponentScan(basePackages = "com.websystique.springmvc")public class HelloWorldConfiguration extends WebMvcConfigurerAdapter{ @Override public void configureViewResolvers(ViewResolverRegistry registry) { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); registry.viewResolver(viewResolver); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("/static/"); } }
初始化
package com.websystique.springmvc.configuration; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class HelloWorldInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { HelloWorldConfiguration.class }; } @Override protected Class<?>[] getServletConfigClasses() { return null; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
创建视图
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Spring 4 MVC File Download Example</title> <link href="<c:url value='/static/css/bootstrap.css' />" rel="stylesheet"></link> <link href="<c:url value='/static/css/app.css' />" rel="stylesheet"></link></head><body> <div class="form-container"> <h1>Welcome to FileDownloader Example</h1> Click on below links to see FileDownload in action.<br/><br/> <a href="<c:url value='/download/internal' />">Download This File (located inside project)</a> <br/> <a href="<c:url value='/download/external' />">Download This File (located outside project, on file system)</a> </div> </body></html>
构建发布和运行
在tomcat里面发布运行
浏览器输入 http://localhost:8080/Spring4MVCFileDownloadExample
点击第一个超链接. 内部(项目内部)文件 [一个 PDF] 将在浏览器中显示, 如果能在浏览器能够显示就会被显示在浏览器里面。
把Content-Disposition 从inline设置为 attachment.构建并重新发布 点第一个链接,PDF将被下载下来。
项目下载:http://websystique.com/?smd_process_download=1&download_id=1769
0 0
- Spring MVC 4 文件下载实例(带源码)
- Spring MVC 4 文件上传下载 Hibernate+MySQL例子 (带源码)
- Spring MVC 4 使用常规的fileupload上传文件(带源码)
- Spring MVC 4使用Servlet 3 MultiPartConfigElement实现文件上传(带源码)
- Spring 4 MVC 表单校验资源处理(带源码)
- Spring 4 MVC HelloWorld 纯注解方式(带源码)
- spring mvc 4 文件下载
- mvc文件下载实例
- Asp.Net Mvc 带进度条大文件上传(附源码下载)
- Spring MVC 文件下载
- Spring mvc 文件下载
- spring mvc 文件下载
- Spring MVC下载文件
- spring mvc 文件下载
- Spring mvc 文件下载
- Spring MVC文件下载
- spring mvc下载文件
- Spring MVC 文件下载
- spring 集成apache qpid 简单demo
- socket通信代码例子
- 15 个 Android 通用流行框架大全
- 遍历Map的四种方法
- jsp 资料
- Spring MVC 4 文件下载实例(带源码)
- 用RaspberryPi2打造自己的静音PC
- alfred
- 【DSP开发】【VS开发】PCIE设备扫描过程
- 项目3-警察和厨(2)
- [kuangbin带你飞]专题四 最短路练习 -A - Til the Cows Come Home
- 【Android】几种常见广播监听器(Wifi,亮灭屏,Home键,短信)总结
- Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握
- c++作业5,数组分离,成绩,数组选择