分享Spring的下载组件

网友投稿 192 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 export(File file) {

return export(file.getName(), file);

}

/**

* 下载文件通用方法

*

* @param fileName 文件名称

* @param file 文件对象

* @return 文件字节流

*/

public ResponseEntity export(String fileName, File file) {

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

headers.setContentDispositionFormData("attachment", encodeFileName(fileName));

ResponseEntity 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 加码的文件名称

*

* 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小时内删除侵权内容。

上一篇:使用Bootstrap框架制作查询页面的界面实例代码
下一篇:Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
相关文章

 发表评论

暂时没有评论,来抢沙发吧~