springboot實(shí)現(xiàn)返回文件流
springboot返回文件流
@GetMapping(value = "/file/{fileName}")
public ResponseEntity<FileSystemResource> getFile(@PathVariable("fileName") String fileName) throws FileNotFoundException {
File file = new File(filePath, fileName);
if (file.exists()) {
return export(file);
}
System.out.println(file);
return null;
}
public ResponseEntity<FileSystemResource> export(File file) {
if (file == null) {
return null;
}
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", "attachment; filename=" + file.getName());
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
headers.add("Last-Modified", new Date().toString());
headers.add("ETag", String.valueOf(System.currentTimeMillis()));
return ResponseEntity.ok().headers(headers).contentLength(file.length()).contentType(MediaType.parseMediaType("application/octet-stream")).body(new FileSystemResource(file));
}
springboot返回二進(jìn)制文件流
@GetMapping("/getTemplateFile")
@ApiOperation("數(shù)據(jù)模板下載")
public ResponseEntity<byte[]> downFile(HttpServletRequest request) throws IOException {
File file = new File("C/AA");
filename = getFilename(request, filename);
//設(shè)置響應(yīng)頭
HttpHeaders headers = new HttpHeaders();
//通知瀏覽器以下載的方式打開文件
headers.setContentDispositionFormData("attachment", filename);
//定義以流的形式下載返回文件數(shù)據(jù)
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//使用springmvc框架的ResponseEntity對象封裝返回?cái)?shù)據(jù)
return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
}
/**
* 根據(jù)瀏覽器的不同進(jìn)行編碼設(shè)置
*
* @param request 請求對象
* @param filename 需要轉(zhuǎn)碼的文件名
* @return 返回編碼后的文件名
* @throws IOException
*/
public String getFilename(HttpServletRequest request, String filename) throws IOException {
//IE不同版本User-Agent中出現(xiàn)的關(guān)鍵詞
String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
//獲取請求頭代理信息
String userAgent = request.getHeader("User-Agent");
for (String keyWord : IEBrowserKeyWords) {
if (userAgent.contains(keyWord)) {
//IE內(nèi)核瀏覽器,統(tǒng)一為utf-8編碼顯示
return URLEncoder.encode(filename, "UTF-8");
}
}
//火狐等其他瀏覽器統(tǒng)一為ISO-8859-1編碼顯示
return new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java經(jīng)典設(shè)計(jì)模式之觀察者模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之觀察者模式,簡單分析了觀察者模式的概念、原理并結(jié)合實(shí)例形式給出了java觀察者模式的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08
MyBatisPlus PaginationInterceptor分頁插件的使用詳解
這篇文章主要介紹了MyBatisPlus PaginationInterceptor分頁插件的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Elasticsearch Join字段類型簡單快速上手教程
這篇文章主要為大家介紹了Elasticsearch Join字段類型簡單快速上手教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
代理角色java設(shè)計(jì)模式之靜態(tài)代理詳細(xì)介紹
查了好多資料,發(fā)現(xiàn)還是不全,干脆自己整理吧,至少保證在我的做法正確的,以免誤導(dǎo)讀者,也是給自己做個記錄吧!2013-05-05
REST架構(gòu)及RESTful應(yīng)用程序簡介
這篇文章主要為大家介紹了REST架構(gòu)及RESTful的應(yīng)用程序簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Eclipse中導(dǎo)入Maven Web項(xiàng)目并配置其在Tomcat中運(yùn)行圖文詳解
這篇文章主要介紹了Eclipse中導(dǎo)入Maven Web項(xiàng)目并配置其在Tomcat中運(yùn)行圖文詳解,需要的朋友可以參考下2017-12-12
java生成csv文件亂碼的解決方法示例 java導(dǎo)出csv亂碼
這篇文章主要介紹了java生成csv文件亂碼的解決方法,大家可以直接看下面的示例2014-01-01
Java讀取resources目錄下文件路徑的九種代碼示例教程
在Java開發(fā)中經(jīng)常需要讀取項(xiàng)目中resources目錄下的文件或獲取資源路徑,這篇文章主要給大家介紹了關(guān)于Java讀取resources目錄下文件路徑的九種代碼示例教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
SpringCloud_Sleuth分布式鏈路請求跟蹤的示例代碼
Spring Cloud Sleuth是一款針對Spring Cloud的分布式跟蹤工具,本文通過實(shí)例代碼介紹了SpringCloud_Sleuth分布式鏈路請求跟蹤,感興趣的朋友跟隨小編一起看看吧2023-02-02
SpringBoot中mapper.xml文件存放的兩種實(shí)現(xiàn)位置
這篇文章主要介紹了SpringBoot中mapper.xml文件存放的兩種實(shí)現(xiàn)位置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

