Spring文件下载
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文件下载的更多相关文章
- springboot成神之——spring文件下载功能
本文介绍spring文件下载功能 目录结构 DemoApplication WebConfig TestController MediaTypeUtils 前端测试 本文介绍spring文件下载功能 ...
- spring文件下载记录
/** * 下载方法 * @param request * @param response * @param storeName 文件在存在位置的名字(需要带着后缀) * @param content ...
- Spring MVC文件下载
方案一: // 文件下载 @RequestMapping(value = "/downloadFile") public ResponseEntity<byte[]> ...
- Spring MVC 的文件下载
在看Spring MVC文件下载之前请先看Spring MVC文件上传 地址:http://www.cnblogs.com/dj-blog/p/7535101.html 文件下载比较简单,在超链接中指 ...
- Spring MVC 文件上传 & 文件下载
索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadCon ...
- spring cloud feign 文件上传和文件下载
文件上传参考文档:http://blog.didispace.com/spring-cloud-starter-dalston-2-4/ 文件下载参考文档:https://blog.csdn.net/ ...
- Spring Boot实现文件下载功能
我们只需要创建一个控制器(Controler)文件,即Controller目录下的File_Download.java,其完整目录如下: @Controller public class File_D ...
- Spring Boot入门(11)实现文件下载功能
在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能. 还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会. 本次建立的Spring Boot项目的主要功能 ...
- Spring AOP Example 文件下载:
文件下载:http://files.cnblogs.com/wucg/spring_aop_excise.zip P:124 spring核心技术 P225: spring doc 可以把Advi ...
随机推荐
- Django博客开发教程,Django快速开发个人blog
学DjangoWEB框架,估计大部分的朋友都是从Blog开发开始入门的,Django中文网发布了一个Django开发教程,这个教程简单易懂,能让你快速的使用Django开发一个漂亮的个人blog,是D ...
- luogu2486 [SDOI2011]染色
link 题目大意:给定一个N个点的树,每个点有一个颜色 有M次操作,每次可以修改树某条链所有点变成一个颜色,查询某条链上点的颜色段数 树剖,线段树维护区间合并 我的代码记录的是某个区间左端点颜色.右 ...
- python安装出现的证书问题
1. pip install pyenv 安装时出现下图错误 Could not install packages due to an EnvironmentError: HTTPSConnectio ...
- react 中文文档案例六 (表单)
class Reservation extends React.Component { constructor(props) { super(props); this.state = { isGoin ...
- Mybatis学习笔记(三) —— DAO开发方法
一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...
- Experimental Educational Round: VolBIT Formulas Blitz K
Description IT City company developing computer games decided to upgrade its way to reward its emplo ...
- day34 协程
1. 前提 之前我们学习了线程.进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来说我们已经算是把cpu的利用率提高很多了.但是我们知道无论是创建多进程还 ...
- jq得到总价
<html><head> <title></title> {load href="/static/js/jquery-1.9.1.min.js ...
- 2.Servlet(一)
1.Servlet的编写.访问过程: (1)编写部署Servlet程序: 编写源文件->编译类文件->部署程序->运行->Servlet处理请求,返回响应. (2)Eclips ...
- put get & push pull
总要有一个容器,一个生产方,一个消费方