分享Spring的下载组件
时间:2021-12-11 09:12:42|栏目:JAVA代码|点击: 次
本文为大家分享了Spring4的下载组件,供大家参考,具体内容如下
package com.hnust.common.controller;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* Created by Heweipo on 2016/5/27.
* <p>
* 下载通用控制器
*/
@RestController
public class DownloadController extends BaseController {
/**
* 下载文件通用方法
*
* @param file 文件对象
* @return 文件字节流
*/
public ResponseEntity<byte[]> export(File file) {
return export(file.getName(), file);
}
/**
* 下载文件通用方法
*
* @param fileName 文件名称
* @param file 文件对象
* @return 文件字节流
*/
public ResponseEntity<byte[]> export(String fileName, File file) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", encodeFileName(fileName));
ResponseEntity<byte[]> rs = null;
try {
// 这里不能使用 HttpStatus.CREATED 201 是因为 IE Edge 无法识别,但是Firefox chrome 没问题
rs = new ResponseEntity<>(FileUtils.readFileToByteArray(file),
headers, HttpStatus.OK);
} catch (IOException e) {
//throw new CommonException(ResponseStatusEnum.FILE_ERROR, e);
}
return rs;
}
/**
* 下载文件的名称,这个是在浏览器那里显示的名称
*
* @param fileName 文件名称
* @return 加码的文件名称
* <p>
* IE
* Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
* <p>
* Edge
* Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586
* <p>
* Firefox
* Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
* <p>
* Chrome
* Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
*/
private String encodeFileName(String fileName) {
String name = fileName;
try {
String agent = request.getHeader("USER-AGENT").toLowerCase();
if (null != agent && (agent.contains("msie") || agent.contains("edge"))) { // IE edge
name = URLEncoder.encode(fileName, "UTF-8");
} else if (agent.contains("safari") || agent.contains("chrome") || agent.contains("firefox")) { // safari chrome firefox
name = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
} else { // IE10 IE11
name = URLEncoder.encode(fileName, "UTF-8");
}
// 把加号还原为空格(IE Edge 有问题)
name = name.replace("+", "%20");
} catch (UnsupportedEncodingException e) {
//throw new CommonException(ResponseStatusEnum.FAILURE, e);
}
return name;
}
}
上一篇:使用springboot对linux进行操控的方法示例
栏 目:JAVA代码
本文标题:分享Spring的下载组件
本文地址:http://www.codeinn.net/misctech/186548.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




