展示如何使用Spring MVC4执行文件下载,我们将看到应用程序从文件系统内部以及外部文件下载文件。

下载文件是相当简单的,涉及以下步骤。

  • 创建一个InputStream到文件用于下载。
  • 查找MIME类型下载文件的内容。
    –可以是application/pdf, text/html,application/xml,image/png等等。
  • 将内容类型与上述发现的MIME类型响应(HttpServletResponse)。
    response.setContentType(mimeType);
  • 针对以上找到MIME类型设置内容长度。
    response.setContentLength(file.getLength());//length in bytes
  • 为响应设置内容处理标头。
    response.setHeader(“Content-Disposition”, “attachment; filename=” + fileName); //随着“附件”文件将下载。可能会显示一个“另存为”基于浏览器的设置对话框。

    response.setHeader(“Content-Disposition”, “inline; filename=” + fileName);//通过“内联”浏览器将尝试显示内容到浏览器中(图片,PDF,文本,...)。对于其他内容类型,文件将直接下载。

  • 从InputStream中复制字节响应到 OutputStream。
  • 一旦复制完成后,关闭输入输出流。

内部文件下载:通过Thread.currentThread.getContextClassLoad()类来加载文件

//内部文件
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
file = new File(classLoader.getResource(INTERNAL_FILE).getFile());

  

获取文件类型mimeTyp:URLConnection.guessContentTypeFromName(file.getName())

String  mimeType = URLConnection.guessContentTypeFromName(file.getName());
response.setContentType(mimeType);

输出文件类型/文件下载路径:

  

//文件类型
response.setContentType(mimeType);
//文件地址
response.setHeader("Content-Disposition", String.format("inline; filename=\"" + file.getName() +"\""));
//文件大小
response.setContentLength((int)file.length());

  

通过FileCopyUtils.copy(springmvc)复制文件流下载输出:

InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(inputStream, response.getOutputStream());

  

完整实施例在下面讨论。

pom.xml配置

 <properties>
<springVersion>4.3.5.RELEASE</springVersion>
</properties> <dependencies> <!-- spring模块库 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<!-- transaction事务 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springVersion}</version>
</dependency> <!-- Servlet dependencies -->
<!-- servlet(HttpServletRequest,HttpServletResponse) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency> <!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> </dependencies> <build>
<finalName>gugua14</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warName>gugua14</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

  

HelloWorldConfiguration.java

package springmvc.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
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.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration
@EnableWebMvc
@ComponentScan(basePackages="springmvc")
public class HelloWorldConfiguration extends WebMvcConfigurerAdapter{ @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// TODO Auto-generated method stub
//super.addResourceHandlers(registry); //设置静态目录
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
} @Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// TODO Auto-generated method stub
//super.configureViewResolvers(registry);
InternalResourceViewResolver viewReslover = new InternalResourceViewResolver();
viewReslover.setViewClass(JstlView.class);
viewReslover.setPrefix("/WEB-INF/views/");
viewReslover.setSuffix(".jsp");
registry.viewResolver(viewReslover);
} }

  

dispatcherServlet转发配置

package springmvc.configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class HelloWorldIntializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {HelloWorldConfiguration.class};
} @Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return null;
} @Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] {"/"};
} }

  

controller代码

package 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.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; @Controller
public class HelloWorldController { private static final String FILE_1 = "APICloud-basic-2.2.1.zip";
private static final String FILE_2 ="D:/download/APICloud-basic-2.2.1.zip"; @RequestMapping(value="/down", method=RequestMethod.GET)
public String index()
{
return "index";
} @RequestMapping(value="/download/{type}", method=RequestMethod.GET)
public void download(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(FILE_1).getFile() );
}else {
//外部地址
file = new File(FILE_2);
} //文件是否存在
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.");
mimeType = "application/octet-stream";
}
System.out.println("mimeType:" + mimeType); //输出类型
response.setContentType(mimeType);
//mime协议:默认文件名
response.setHeader("Content-Disposition", String.format("inline: filename=\""+file.getName()+"\""));
//mime协议:以附件形式下载
response.setHeader("Content-Disposition", String.format("attachment: filename=\"%s\"", file.getName()));
//文件大小
response.setContentLength((int) file.length()); //读入文件,然后再输出
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
//拷贝,下载
FileCopyUtils.copy(inputStream, response.getOutputStream()); } }

  

访问地址:http://localhost:8080/gugua14/down

Spring4 MVC文件下载实例(javaconfig)的更多相关文章

  1. Spring4 MVC文件下载实例

    这篇文章将向您展示如何使用Spring MVC4执行文件下载,我们将看到应用程序从文件系统内部以及外部文件下载文件. 本教程的主要亮点: 下载文件是相当简单的,涉及以下步骤. 创建一个InputStr ...

  2. Spring4 MVC HelloWord实例

    一.创建Web项目 我用的eclipse,创建步骤:file=>New=>Other=>Web=>Dynamic Web project,按照操作创建一个完整的Web项目,下载 ...

  3. Spring4 MVC HelloWorld 注解和JavaConfig实例

    在这一节中,我们以 Spring4 MVC HelloWorld 注释/JavaConfig为示例,一步一步以简单的方式学习Spring4 MVC 的注解,项目设置,代码,部署和运行. 在先前的 Sp ...

  4. spring mvc:练习:javaConfig配置和注解

    Spring4 MVC HelloWorld 注释/JavaConfig为示例,一步一步以简单的方式学习Spring4 MVC 的注解,项目设置,代码,部署和运行. 我们已经使用XML配置开发了一个H ...

  5. Spring4 MVC ContentNegotiatingViewResolver多种输出格式实例

    本文演示支持多种输出格式,这里 Spring4 MVC应用程序使用了 Spring ContentNegotiatingViewResolver .我们将生成应用程序输出XML,JSON,PDF,XL ...

  6. Spring4 MVC ContentNegotiatingViewResolver多种输出格式实

    前段时间在一个项目里面发现,针对Excel的处理没有一个公用的视图,来个下载的需求就要自己去写一堆POI的东西,终于有一天给我也来了几个,还是按照以前的方式来写,写多了真心想吐,后面想想还是有必要整个 ...

  7. PHP: 手把手编写自己的 MVC 框架实例教程

    1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...

  8. Spring4 MVC Hibernate4集成 Annotation

    Spring4 MVC Hibernate4集成 Annotation 一.本文所用环境 二.工程目录 三.Maven添加依赖 四.新建数据库表 五.配置文件 六.Model层 七.DAO层 八.Se ...

  9. Spring4 MVC Hibernate4集成

      Spring4 MVC Hibernate4集成 一.    本文所用环境 Spring4.0.3.RELEASE Hibernate4.3.5.Final Mysql 二.    工程目录 三. ...

随机推荐

  1. SVN Checkout 不包括源文件夹根目录

    SVN Checkout 不包括源文件夹根目录,比如我要checkout   trunk/ 下面的所有文件,但是不包括trunk 文件夹 我们可以在svn文件夹后面打个空格,在加个“.”就行了 eg: ...

  2. Centos7 Zabbix3.2安装

    实验环境: 阿里云 [zabbix@miyan ~]$ cat /etc/redhat-release CentOS Linux release (Core) 不得不说,官方文档确实强大 1.官方文档 ...

  3. ng-深度学习-课程笔记-6: 建立你的机器学习应用(Week1)

    1 训练/验证/测试集( Train/Dev/test sets ) 构建神经网络的时候有些参数需要选择,比如层数,单元数,学习率,激活函数.这些参数可以通过在验证集上的表现好坏来进行选择. 前几年机 ...

  4. aTool在线工具

    在线HTTP POST/GET接口测试工具 - aTool在线工具 地址:http://www.atool.org/httptest.php在线接口测试工具接口测试是测试系统组件间接口的一种测试.接口 ...

  5. [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...

  6. Centos7.5 升级python3.6

    Centos7.5自带为/usr/bin/python2.7,需升级到python3.6,安装非常简单,直接通过yum. #centos7 pythonyum install epel-release ...

  7. 前端学习笔记之JavaScript

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客 ...

  8. # 20145106 《Java程序设计》第3周学习总结

    教材学习内容总结 在本周的学习中,我看到了这样一句话:"使用java撰写程序几乎都是在使用对象(object),要产生对象必须先定义类(class),类是对象的设计图,对象是类的实例(ins ...

  9. 20159212杨翔实验一(熟悉Java开发环境)实验报告

     实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验步骤与体会 一.命令行下Java程序开发 1.操作过程     在虚拟环境中 ...

  10. 20145326 《Java程序设计》第5周学习总结

    20145326 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 一.语法与继承结构 1.使用try .catch 我们编写程序时总有些由意想不到的状况而引发的错误,java ...