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. SpringBoot dubbo之class is not visible from class loader

    使用了两个类加载器加载了同一个类,区分一个Class对象是否相等要看包名+类名,也要看是否是同一个类加载器 方案一,排查掉spring-boot-devtools模块的maven引入可以解决,这时候所 ...

  2. LCA 【bzoj 4281】 [ONTAK2015]Związek Harcerstwa Bajtockiego

    [bzoj 4281] [ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点. ...

  3. luogu4240 毒瘤之神的考验(毒瘤乌斯反演)

    link 题意:求出\(\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\),对998244353取模 多组数据,\(T\le 10^4,n,m\le 10^5\). 前置知识: ...

  4. webpack 的使用教程

    webpack 的使用教程 今天接触webpack,就着官网上的教程一步一步的玩,把自己的理解总结以便和大家交流 webpack的主要特点 1. 可以把js,css,image,甚至文本当成模块来处理 ...

  5. [HNOI2009]梦幻布丁 BZOJ1483 set

    题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式: 第 ...

  6. Qt 学习之路 2(20):event()

    Qt 学习之路 2(20):event() 豆子 2012年10月10日 Qt 学习之路 2 43条评论 前面的章节中我们曾经提到event()函数.事件对象创建完毕后,Qt 将这个事件对象传递给QO ...

  7. 老男孩python作业3-购物车程序优化

    购物车优化要求:用户入口: 1.商品信息存在文件里 2.已购商品,余额记录.第一次启动程序时需要记录工资,第二次启动程序时谈出上次余额 3.允许用户根据商品编号购买商品 4.用户选择商品后,检测是否够 ...

  8. Linq,拉姆达表达式注意!

    linq的条件语句尽量不要出现计算的式子,要不然很可能,程序不能正确的将这些复杂的式子编译成表达式!! 例如: dataContext.Assets.Count(s => s.SubCatego ...

  9. 2015苏州大学ACM-ICPC集训队选拔赛(2) 1001 1003 1010

    草爷要的榜 Problem Description 苏州大学代表队又勤奋地开始了训练.今天开了一场时长5小时的组队训练赛,苏州大学的n(1<=n<=100)支校队奋力拼(hua)搏(shu ...

  10. 从M进制转换为N进制

    /// <summary> /// 从M进制转换为N进制 /// </summary> internal class MBase2NBase { /// <summary ...