java實現文件的下載

系統日志的獲取不可能每次都登錄服務器,所以在頁面上能夠下載系統運行的日志是必須的

如何來實現日志的下載,這樣的一個功能

?前端我們用到的是window.open(...)這樣可以發送一個get請求到后臺

?后臺接收到get請求之后,如何實現對文件的下載

	@ResponseBody@RequestMapping("downlogsfile")public void downlogsfile(HttpServletResponse response,String filename) throws IOException {logger.info("**************下載日志相關的日志信息{}*****************",filename);response.setCharacterEncoding("UTF-8");response.setContentType("text/plain;charset=GBK");String path =configService.getByConfigValueByName("LOGPATH");String filepath = path + "/" + filename;logger.info(filepath);File file = new File(filepath);if (file.exists()) {logger.info("找到相關的日志文件:{}", filepath);DownLoadUtils.downloadtxt(response, file);} else {logger.info("文件不存在");}}

關鍵是DownLoadUtils.downloadtxt(response, file);

	public static void downloadtxt(HttpServletResponse res,File file) throws IOException {long length = file.length();res.addHeader("Content-Length", String.valueOf(length));res.addHeader("Content-Type","text/plain; charset=utf-8");res.setHeader("Content-Disposition","attachment;filename="+file.getName());OutputStream outputStream = res.getOutputStream();byte[] buff = new byte[1024];BufferedInputStream bis = null;FileInputStream fileInputStream=new FileInputStream(file);bis = new BufferedInputStream(fileInputStream);int i = bis.read(buff);while (i != -1) {outputStream.write(buff, 0, buff.length);outputStream.flush();i = bis.read(buff);}bis.close();fileInputStream.close();outputStream.close();}

這個里面res.setHeader很重要

res.addHeader("Content-Type","text/plain; charset=utf-8");

text/plain? 純文本的格式,并且設置編碼
res.setHeader("Content-Disposition","attachment;filename="+file.getName());

"Content-Disposition","attachment;filename="+file.getName()

實現下載

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/34797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34797.shtml
英文地址,請注明出處:http://en.pswp.cn/news/34797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu中redis+mysql安裝使用

pip -V 回車(大寫V):python包庫安裝路徑 python -m site: python查找路徑 1、redis ubuntu安裝redis System has not been booted with systemd as init system (PID 1). Cant operate;該問題是systemctl start redis報錯&#…

ZLMediaKit(webrtc)在linux上(CentOS7)部署與啟動

一.ZLMediaKit(webrtc)在CentOS7部署與啟動 # 1. 卸載舊版本 yum remove git # 2. 安裝 yum 源的 Git 版本 yum install -y git # 3. 查看版本 git version # 輸出 git version 1.8.3.1配置全局環境變量 # 1. 編輯配置文件 vim /etc/profile # 2. 在 /etc/profile 文件中末尾…

用 Rufus 制作 Ubuntu 系統啟動盤時,選擇分區類型為MBR還是GPT?

當使用 Rufus 制作 Ubuntu 系統啟動盤時,您可以根據您的需求選擇分區類型,MBR(Master Boot Record)還是 GPT(GUID Partition Table)。 MBR 是傳統的分區表格式,適用于大多數舊版本的操作系統和舊…

2023/08/13_____JMM JAVA Memory Model JAVA內存模型

JMM JAVA Memory Model java內存模型 作用:緩存一致性協議,用于定義數據讀寫的規則(遵守,找到這個規則) JMM定義了線程2工作內存和主內存之間的抽象關系:線程之間的共享變量存儲在主內存(main …

TLS協議

目錄 什么是TLS協議? TLS的基本流程? 兩種密鑰交換算法? 基于ECDHE密鑰交換算法的TLS握手過程? 基于RSA密鑰交換算法的TLS握手過程? 基于RSA的握手和基于ECDHE的握手有什么區別? 什么是前向保密&…

tp6 v3微信退款

/*** Notes:退款* param $out_trade_no 支付時候訂單號(order表 original_bn)兩個參數選一個這個要選對* param $out_refund_no 退款訂單號* param $total 訂單金額* param $refund 退款金額* Time: 2023-08-10*/public function refundMoney($out_trade…

oracle的異常處理

oracle提供了預定義例外、非預定義例外和自定義例外三種類型。其中: l預定義例外用于處理常見的oracle錯誤; l非預定義例外用于處理預定義所不能處理的oracle錯誤; l自定義例外處理與oracle錯誤無關的其他情況。 Oracle代碼編寫過程中&am…

nginx反向代理與負載均衡

負載均衡依靠反向代理實現。nginx的代理分為七層代理與四層代理: 七層代理:七層代理的就是http請求和響應。七層代理是最常用的反向代理方式,只能配置在nginx配置文件的http模塊。而且配置方法名稱:upstream模塊,不能寫…

提升效率!Go語言開發者不可錯過的必備工具集合!

🌷🍁 博主貓頭虎 帶您 Go to Golang Language.??🍁 🦄 博客首頁——貓頭虎的博客🎐 🐳《面試題大全專欄》 文章圖文并茂🦕生動形象🦖簡單易學!歡迎大家來踩踩~&#x1…

UDP數據報網絡編程(實現簡單的回顯服務器,客戶端)

回顯服務器表示客戶端發的是啥,服務器就返回啥,主要是為了熟悉UDP數據報網絡編程的基本步驟 對于程序的所有分析都寫到了代碼上 UDP回顯服務器代碼 package UdpEcho;import java.io.IOException; import java.net.DatagramPacket; import java.net.Dat…

ClickHouse查看執行計劃(EXPLAIN語法)

1.EXPLAIN 語法示例 EXPLAIN [AST | SYNTAX | QUERY TREE | PLAN | PIPELINE | ESTIMATE | TABLE OVERRIDE] [setting value, ...] [ SELECT ... | tableFunction(...) [COLUMNS (...)] [ORDER BY ...] [PARTITION BY ...] [PRIMARY KEY] [SAMPLE BY ...] [T…

途樂證券-最準確的KDJ改良指標?

KDJ目標是技術剖析的一種重要目標之一,它是利用隨機目標(%R)發展而來的,是一種反映商場超買和超賣狀況的買賣目標。KDJ目標由快線(K線)、慢線(D線)和隨機值(J線&#xff…

RestTemplate HTTPS請求忽略SSL證書

問題描述 使用RestTemplate發送HTTPS請求的時候,出現了這樣的一個問題: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification …

MySQL多表查詢

1.創建student和score表 創建score表 2.為student表和score表增加記錄 向student表插入記錄的INSERT語句如下: 向score表插入記錄的INSERT語句如下: 1.查詢student表的所有記錄 2.查詢student表的第2條到4條記錄 3.從student表查詢所有學生的學號&#…

2023最新影視泛目錄系統,蘋果cms最新下載地址

影視泛目錄系統是指一種集成了電影、電視劇、綜藝節目、動漫等多種影視資源資源的系統,其目的是為用戶提供一個方便快捷的影視資源檢索、瀏覽、分享、評論的平臺。該系統通過對影視資源進行分類、標簽化、評分等方式,為用戶提供更加精準的檢索和推薦服務…

C#多線程學習 生產者和消費者

前面說過,每個線程都有自己的資源,但是代碼區是共享的,即每個線程都可以執行相同的函數。這可能帶來的問題就是幾個線程同時執行一個函數,導致數據的混亂,產生不可預料的結果,因此我們必須避免這種情況的發…

mousedown拖拽功能(vue3+ts)

因為項目有rem適配,使用第三方插件無法處理適配問題,所有只能自己寫拖拽功能了 拖拽一般都會想到按下,移動,放開,但是本人親測,就在div綁定一個按下事件就行了(在事件里面寫另外兩個事件&#x…

爬蟲ip池越大越好嗎?

作為一名資深的程序員,今天我要給大家分享一些關于爬蟲ip池的知識。關于ip代理池的問題,答案是肯定的,池子越大越好。下面跟我一起來盤點一下ip池大的好處吧! 1、提高穩定性 爬蟲ip池越大,意味著擁有更多可用的爬蟲ip…

「C/C++」C/C++搭建程序框架

?博客主頁何曾參靜謐的博客📌文章專欄「C/C」C/C程序設計📚全部專欄「UG/NX」NX二次開發「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序設計「C/C」C/C程序設計「Win」Windows程序設計「DSA」數據結構與算法「File」數據文件格式 目錄 1. 分離職…

Flume原理剖析

一、介紹 Flume是一個高可用、高可靠,分布式的海量日志采集、聚合和傳輸的系統。Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制&…