HTTP 下载文件工具类
ResponseUtils.java
package javax.utils; import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder; import javax.servlet.http.HttpServletResponse; import com.fasterxml.jackson.databind.ObjectMapper; /**
* HTTP 输出响应内容工具类
*
* @author Logan
* @createDate 2019-02-13
* @version 1.0.0
*
*/
public class ResponseUtils { /**
* 发送HTTP响应信息
*
* @param response HTTP响应对象
* @param message 信息内容
* @throws IOException 抛出异常,由调用者捕获处理
*/
public static void write(HttpServletResponse response, String message) throws IOException {
response.setContentType("text/html;charset=UTF-8"); try (
PrintWriter writer = response.getWriter();
) {
writer.write(message);
writer.flush();
}
} /**
* 发送HTTP响应信息,JSON格式
*
* @param response HTTP响应对象
* @param message 输出对象
* @throws IOException 抛出异常,由调用者捕获处理
*/
public static void write(HttpServletResponse response, Object message) throws IOException {
response.setContentType("application/json;charset=UTF-8");
ObjectMapper mapper = new ObjectMapper(); try (
PrintWriter writer = response.getWriter();
) {
writer.write(mapper.writeValueAsString(message));
writer.flush();
}
} /**
* 下载文件
*
* @param response HTTP响应对象
* @param file 需要下载的文件
* @throws IOException 抛出异常,由调用者捕获处理
*/
public static void download(HttpServletResponse response, File file) throws IOException {
String fileName = file.getName();
try (
FileInputStream in = new FileInputStream(file);
) { download(response, in, fileName);
}
} /**
* 下载文件
*
* @param response HTTP响应对象
* @param data 需要下载的文件二进制内容
* @param fileName 下载文件名
* @throws IOException 抛出异常,由调用者捕获处理
*/
public static void download(HttpServletResponse response, byte[] data, String fileName) throws IOException {
try (
ByteArrayInputStream in = new ByteArrayInputStream(data);
) { download(response, in, fileName);
}
} /**
* 下载文件
*
* @param response HTTP响应对象
* @param in 输出流
* @param fileName 下载文件名
* @throws IOException 抛出异常,由调用者捕获处理
*/
public static void download(HttpServletResponse response, InputStream in, String fileName) throws IOException {
try (
OutputStream out = response.getOutputStream();
) { // 对文件名进行URL转义,防止中文乱码
fileName = URLEncoder.encode(fileName, "UTF-8"); // 空格用URLEncoder.encode转义后会变成"+",所以要替换成"%20",浏览器会解码回空格
fileName = fileName.replace("+", "%20"); // "+"用URLEncoder.encode转义后会变成"%2B",所以要替换成"+",浏览器不对"+"进行解码
fileName = fileName.replace("%2B", "+");
response.setContentType("application/x-msdownload;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName); byte[] bytes = new byte[4096];
int len = -1;
while ((len = in.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
out.flush();
}
} }
HTTP 下载文件工具类
.
HTTP 下载文件工具类的更多相关文章
- java下载文件工具类
		java下载文件工具类 package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutput ... 
- ftp上传或下载文件工具类
		FtpTransferUtil.java工具类,向ftp上传或下载文件: package utils; import java.io.File; import java.io.FileOutputSt ... 
- FileUtils 文件工具类
		FileUtils 下载jar中的文件 package com.meeno.chemical.common.utils; import lombok.extern.slf4j.Slf4j; impor ... 
- rz和sz上传下载文件工具lrzsz
		######################### rz和sz上传下载文件工具lrzsz ####################################################### ... 
- 自动扫描FTP文件工具类 ScanFtp.java
		package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ... 
- 读取Config文件工具类 PropertiesConfig.java
		package com.util; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io ... 
- linux上很方便的上传下载文件工具rz和sz
		linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ... 
- Property工具类,Properties文件工具类,PropertiesUtils工具类
		Property工具类,Properties文件工具类,PropertiesUtils工具类 >>>>>>>>>>>>>& ... 
- Android FileUtil(android文件工具类)
		android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ... 
随机推荐
- cmake中文帮助文档
			CMake的 在这个页面 了解CMake的生成命令 在摇篮使用cmake变量 报告问题 使用过Android Studio 2.2及更高版本,可以使用NDK和CMake的 编译C和C ++代码到本机库 ... 
- linux 查看页大小
			# getconf PAGE_SIZE 一般是4096 
- 性能测试工具LoadRunner05-LR之Virtual User Generator   html模式与url模式
			“HTML-based script”说明 在默认情况下,选择“HTML-based script”,说明脚本中采用HTML页面的形式来表示,这种方式的脚本容易维护,容易理解,推荐这种方式录制 “UR ... 
- Kudu的架构
			不多说,直接上干货! Kudu的架构 1.kudu的 基本框架 Kudu 是用于存储结构化( structured )的表( Table ).表有预定义的带类型的列( Columns ),每张表有一 ... 
- JDK基本知识
			JDK发展史: JDK1.0:提供了一个纯解释的Java虚拟机实现 JDK1.3:把Java技术体系拆分为3个方向,J2SE,J2EE,J2ME,并且Java虚拟机第一次内置了JIT JDK1.4:增 ... 
- 阿里云短信验证~JAVA后台
			maven :中的 pom.xml添加 <dependency> <groupId>com.aliyun</groupId> <artifactId>a ... 
- 粗看ES6之JSON
			标签: es6 ES6新增JSON特性不是特别多,只是针对JSON某些情况下的写法上有一些优化: 当key值和value值对应变量名相同时 json对像中的方法书写 示例代码如下: <!DOCT ... 
- Java执行Shell脚本
			Linux 系统下采用 Java 执行 Shell 脚本,直接上代码: package com.smbea.demo; import java.io.BufferedReader; import ja ... 
- OC跟Swift混编
			OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyue ... 
- ARM平台指令虚拟化初探
			0x00:什么是代码虚拟化? 虚拟机保护是这几年比较流行的软件保护技术.这个词源于俄罗斯的著名软件保护软件“VmProtect”,以此为开端引起了软件保护壳领域的革命,各大软件保护壳都将虚拟机保护这一 ... 
