java中的接口是类吗
217
2023-07-16
分享Spring的下载组件
本文为大家分享了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.
*
* 下载通用控制器
*/
@RestController
public class DownloadController extends BaseController {
/**
* 下载文件通用方法
*
* @param file 文件对象
* @return 文件字节流
*/
public ResponseEntity
return export(file.getName(), file);
}
/**
* 下载文件通用方法
*
* @param fileName 文件名称
* @param file 文件对象
* @return 文件字节流
*/
public ResponseEntity
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", encodeFileName(fileName));
ResponseEntity
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 加码的文件名称
*
* IE
* Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
*
* 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
*
* Firefox
* Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
*
* 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;
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~