文件下载
/**
*
* 文件下载
*/
@GetMapping("/downLoadFile")
public void downLoadFile(HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
// 设置文件头:最后一个参数是设置下载 文件名+后缀名,如文件名称.doc
String str = "attachment;filename=" + new String("文件名称.doc".getBytes(), StandardCharsets.ISO_8859_1);
response.setHeader("Content-Disposition", str);
//todo 将文件流写入response
} catch (Exception e) {
e.printStackTrace();
}
}
注:若不设置Content-Type,且文件是pdf/img等可预览文件,chrome会自动切换成预览模式,加上以下代码即可
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
文件预览
/**
* 文件预览
*/
@GetMapping("/previewFile")
public void previewFile(HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
// 设置文件头:预览设置 文件名+后缀名,如文件名称.doc
//若是浏览器可以识别的文件,直接预览,否则直接下载
String str = "inline;filename=" + new String("文件名称.doc".getBytes(), StandardCharsets.ISO_8859_1);
response.setHeader("Content-Disposition", str);
//todo 将文件流写入response
} catch (Exception e) {
e.printStackTrace();
}
}
rpc接口调用
rpc接口封装
import feign.Response;
@FeignClient(value = "fileCenter", configuration = FeignClientsConfig.class)
public interface FileFeign {
/**
* 下载文件
*
* @return 下载文件流
*/
@GetMapping(value = "/file/downLoadFile")
Response downloadFile();
}
control层
@GetMapping("downLoadFile")
public void downLoadFile(HttpServletResponse response) {
Response responseImg = fileFeign.downloadFile();
try {
IoUtils.copy(responseImg.body().asInputStream(), response.getOutputStream());
response.setCharacterEncoding("UTF-8");
// 设置文件头:设置下载文件名
response.setHeader("Content-Disposition", responseImg.headers().get("Content-Disposition").stream().collect(Collectors.toList()).get(0));
} catch (IOException e) {
log.error("文件下载异常");
}
}