package com.smbea.demo.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; /**
* 文件下载
* @author hapday
* @date 2017年1月23日 @time上午10:58:04
*/
@Controller
@RequestMapping( value = "admin/file" )
public class FileDownloadController {
protected static final Logger LOGGER = LoggerFactory.getLogger(FileDownloadController.class); @RequestMapping(value = "fileDownloadTest", method = { RequestMethod.GET, RequestMethod.POST })
public void fileDownloadTest(HttpServletRequest request, HttpServletResponse response) {
String fileName = "test.pdf"; try {
fileName = URLEncoder.encode("软件秘笈设计模式那点事.pdf", "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} // System.out.println(request.getServletContext().getMimeType(fileName)); response.reset();
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);// 指定下载的文件名
response.setContentType("application/octet-stream");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0); URL url = null; // URL 地址 try {
url = new URL("http://www.smbea.com/pdf/软件秘笈设计模式那点事.pdf");
} catch (MalformedURLException e) {
LOGGER.error("无效的 PDF 文件。", e);
e.printStackTrace();
} try {
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); // 打开 HTTP 连接
httpURLConnection.setDoOutput(true); int responseCode = httpURLConnection.getResponseCode();
System.out.println("responseCode = " + responseCode); if(500 == responseCode) {
System.out.println("HttpURLConnection 内部错误!"); return;
}
if(404 == responseCode) {
System.out.println("文件未找到!"); return;
} if(200 != responseCode) {
return ;
} InputStream inputStream = httpURLConnection.getInputStream(); // 获取 HTTP 连接中的输入流
OutputStream outputStream = response.getOutputStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); int len = 2048;
     byte[] b = new byte[len];
        while(-1 != (len = bufferedInputStream.read(b))) {
       bufferedOutputStream.write(b, 0, len);
     } bufferedOutputStream.flush();
bufferedOutputStream.close();
bufferedInputStream.close();
outputStream.close();
inputStream.close();
httpURLConnection.disconnect();
} catch (IOException e) {
LOGGER.error("文件下载 - 失败!", e);
e.printStackTrace();
}
}
}

  

Spring文件下载的更多相关文章

  1. springboot成神之——spring文件下载功能

    本文介绍spring文件下载功能 目录结构 DemoApplication WebConfig TestController MediaTypeUtils 前端测试 本文介绍spring文件下载功能 ...

  2. spring文件下载记录

    /** * 下载方法 * @param request * @param response * @param storeName 文件在存在位置的名字(需要带着后缀) * @param content ...

  3. Spring MVC文件下载

    方案一: // 文件下载 @RequestMapping(value = "/downloadFile") public ResponseEntity<byte[]> ...

  4. Spring MVC 的文件下载

    在看Spring MVC文件下载之前请先看Spring MVC文件上传 地址:http://www.cnblogs.com/dj-blog/p/7535101.html 文件下载比较简单,在超链接中指 ...

  5. Spring MVC 文件上传 & 文件下载

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadCon ...

  6. spring cloud feign 文件上传和文件下载

    文件上传参考文档:http://blog.didispace.com/spring-cloud-starter-dalston-2-4/ 文件下载参考文档:https://blog.csdn.net/ ...

  7. Spring Boot实现文件下载功能

    我们只需要创建一个控制器(Controler)文件,即Controller目录下的File_Download.java,其完整目录如下: @Controller public class File_D ...

  8. Spring Boot入门(11)实现文件下载功能

      在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能.   还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会.   本次建立的Spring Boot项目的主要功能 ...

  9. Spring AOP Example 文件下载:

      文件下载:http://files.cnblogs.com/wucg/spring_aop_excise.zip P:124 spring核心技术 P225: spring doc 可以把Advi ...

随机推荐

  1. vue_cli下开发一个简单的模块权限系统之建立登录页面并且实现在浏览器输入地址出现内容

    新建一个Login.vue(登录页面,先把Hello.vue的内容复制过来即可) 然后我们打开router下面的index.js,第一个箭头:(引入vue路由)第二个箭头(引入我们新建的Login.v ...

  2. #6145. 「2017 山东三轮集训 Day7」Easy 动态点分治

    \(\color{#0066ff}{题目描述}\) JOHNKRAM 最近在参加 C_SUNSHINE 举办的聚会. C 国一共有 n 座城市,这些城市由 n−1 条无向道路连接.任意两座城市之间有且 ...

  3. 内核启动后,lcd显示logo失败

    针对-s5pv210,但对其他平台也使用 lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印“Start display and show logo”,但是LCD屏没有显示    ...

  4. [USACO5.4]奶牛的电信Telecowmunication 最小割

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  5. 分析mybatis和jdbc的作用,已经原理

    从jdbc的操作数据库来看:主要分为几步: 1 注冊载入JDBC驱动程序: 2 得到连接对象 Connection 3 创建 Statement对象 4 运行sql语句 5 处理结果 6 关闭资源释放 ...

  6. 5.mybatis 多参数传递 -分页

    需求 :分页   方法一:使用下标来进行赋值,下标从零开始 mapper.xml <select id="selectByPage" resultMap="blog ...

  7. C语言预处理命令之文件包含

    文件包含预处理命令的一般形式是: #include<文件名> 或者 #include“文件名” #include命令告诉预处理器用指定文件的内容替换这条命令,两种不同的命令格式决定了预处理 ...

  8. hdu1166 敌兵布阵 线段树(区间更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. hdu2067 小兔的棋盘

    小兔的棋盘 时间限制:1000/1000 MS(Java / Others)内存限制:32768/32768 K(Java / Others)总提交内容:13029接受的提交内容:6517 问题描述 ...

  10. day35 数据库的初步认识

    一.    数据库的由来分类 1.   数据库的概念 百度定义: 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系 ...