js+spring boot實現簡單前后端文件下載功能

js+boot項目實現自定義下載

一、前端頁面

1、先導入axios的js包

2、注意axios響應的格式:result.data.真實的數據內容

3、這里請求的url就是你boot項目的getMapping的url,保持一致即可

4、如果想在后端設置文件名,那么后端生成后,響應一個fileName字段,前端解析給值就可以了。

這里是js在頁面追加了一個a標簽,調用click方法,實現代碼觸發跳轉的。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="js/axios.min.js"></script>
</head>
<body>
<h2>模擬下載</h2>
<button onclick="downloading()">Click me</button>
</body>
<script>async function downloading() {const result = await axios.get('http://localhost:8080/download');console.log(result.data)if (result.data.code === 200) {const blob = new Blob([result.data.data], {type: 'text/plain;charset=utf-8'});const link = document.createElement('a')link.style.display = 'none'const url = URL.createObjectURL(blob)link.href = urllink.download = '文件名.txt'document.body.appendChild(link)link.click()document.body.removeChild(link)URL.revokeObjectURL(url)} else {alert("下載失敗!")}}</script>
</html>

二、后端代碼

1、網上比較多的demo都是返回resp那種通過設置請求體的方式實現的,這里提供另外一種思路,返回數據數組,如果是excel等其他格式,可以響應返回二進制數據 byte[] 這種的。

2、沒有中文等純ASCII碼,可以設置base64響應,如果有Unicode編碼,切記請勿使用base64編碼,否則前端atob()方法之后,會造成亂碼現象。

3、這里使用了Gson,通過其格式化,將map轉為了json字符串返回給前端

    @GetMapping("/download")@ResponseBodypublic String downloadFile() {StringBuilder sb = new StringBuilder();for (int i = 0; i < 500; i++) {sb.append("模擬一條數據").append(i).append("\n");}Map<String, Object> resultMap = new HashMap<>(6);resultMap.put("code", 200);resultMap.put("data", sb.toString());return gson.toJson(resultMap);}

二、項目啟動測試

在這里插入圖片描述
項目啟動訪問:http://localhost:8080/toIndex

在這里插入圖片描述
點擊按鈕實現下載
在這里插入圖片描述
查看txt文本
在這里插入圖片描述

四、總結

以上就是一個簡單的文件下載功能的實現demo。
這里雖然不是前后端分離開發,但是設計理念完全按照后端傳遞數據,不對view做過多處理,還是很有參考學習價值的。

很多細節我都忽略了,只是展示核心的部分。
比如你文件下載涉及分包下載,大文件分段下載等
比如對下載格式的泛化處理等

希望可以幫助大家解決問題,多多點贊主助力博主繼續更新~
大能們輕噴,就是一個簡單demo,互相學習了。

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

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

相關文章

目標檢測算法介紹來了!

隨著人工智能技術的迅猛發展&#xff0c;目標檢測算法在計算機視覺領域扮演著越來越重要的角色。它廣泛應用于安防監控、自動駕駛、醫學影像分析、機器人視覺等多個領域&#xff0c;極大地推動了智能化進程。本文將對目標檢測算法進行深入的探討&#xff0c;包括其基本原理、發…

使用 Streamlit 和 asyncio 模塊進行異步編程

概述 Streamlit 是一個用于構建數據應用程序的強大工具&#xff0c;但它本身并不直接支持異步編程。然而&#xff0c;通過結合 Python 的 asyncio 模塊&#xff0c;我們可以在 Streamlit 應用中實現異步處理&#xff0c;從而提高應用的響應性和效率。 為什么需要異步編程 在…

安卓應用開發學習:騰訊地圖SDK應用改進,實現定位、搜索、路線規劃功能集成

一、引言 我的上一篇學習日志《安卓應用開發學習&#xff1a;通過騰訊地圖SDK實現定位功能》記錄了利用騰訊地圖SDK實現手機定位功能&#xff0c;并能獲取地圖中心點的經緯度信息。這之后的幾天里&#xff0c;我對《Android App 開發進階與項目實戰》一書第九章的內容深入解讀…

【深度學習實戰(44)】Anchor based and Anchor free(無錨VS有錨)

1 anchor-based 深度學習目標檢測通常都被建模成對一些候選區域進行分類和回歸的問題。在單階段檢測器中&#xff0c;這些候選區域就是通過滑窗方式產生的 anchor&#xff1b;在兩階段檢測器中&#xff0c;候選區域是 RPN 生成的 proposal&#xff0c;但是 RPN 本身仍然是對滑窗…

leetcode--層數最深葉子節點的和

leetcode地址&#xff1a;層數最深葉子節點的和 給你一棵二叉樹的根節點 root &#xff0c;請你返回 層數最深的葉子節點的和 。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,3,4,5,null,6,7,null,null,null,null,8] 輸出&#xff1a;15 示例 2&#xff1a; 輸入&#xff…

多點GRE over IPsecVPN模式下nhrp的調優

一、實驗目的 在多點GRE over IPsecVPN模式下對nhrp進行調優&#xff0c;在總部開啟重定向、在分支開啟shortcut 網絡拓撲&#xff1a; 二、基礎設置 &#xff08;一&#xff09;如圖所示配置接口地址和區域&#xff0c;連接PC的接口位于trust區域、連接路由器的接口位于unt…

qt5.15關于qradiobutton遇到的坑

前言 不知道是只有我遇到了&#xff0c;還是qt本身就存在這個bug 當將2個qradiobutton放入到一個布局內&#xff0c;然后進行來回切換&#xff0c;若無數據刷新的情況下&#xff0c;切換無異常&#xff0c;當窗體內有數據開始刷新了&#xff0c;則點擊其中一個qradiobutton&am…

語法糖:代碼中的甜品

人不走空 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌賦&#xff1a;斯是陋室&#xff0c;惟吾德馨 目錄 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌…

以太網電路相關功能說明

RJ45模塊用于PHY芯片之間的互連&#xff0c;如圖1所示&#xff0c;RJ45有兩種組合形式&#xff0c;一種是分立式&#xff0c;網口變壓器和RJ45連接座是分開的&#xff0c;另一種是網口變壓器和RJ45集成在一起。 圖1 RJ45兩種主要形式 接下來以分立式RJ45的百兆網電路做個說明&a…

基于springboot+vue養老院管理系統+lw+源碼+講解+調試+演示視頻

第3章 系統分析 用戶的需求以及與本系統相似的在市場上存在的其它系統可以作為系統分析中參考的資料&#xff0c;分析人員可以根據這些信息確定出本系統具備的功能&#xff0c;分析出本系統具備的性能等內容。 3.1可行性分析 盡管系統是根據用戶的要求進行制作&#xff0c;但…

Matlab基礎語法篇(上)

Matlab基礎語法&#xff08;上&#xff09; 一、基知&#xff08;一&#xff09;界面介紹&#xff08;二&#xff09;常用快捷鍵&#xff08;三&#xff09;常用指令&#xff08;四&#xff09;Matlab幫助系統 二、運算基礎&#xff08;一&#xff09;變量&#xff08;二&#…

車道線識別研究

想研究車道線識別的深度學習網絡… 目錄 1.車道線數據集匯總及研究1.1 CULane Datesets1.1.1 相關連接1.1.2 介紹 1.2 Tusimple1.3 LLAMAS1.4 APOLLOSCAPE 2.車道線檢測框架2.1 LaneNet&#xff1a;實時車道線檢測框架 1.車道線數據集匯總及研究 參考文檔&#xff1a; 1.車道線…

sysbench 搭建使用

1.下載地址&#xff1a; https://github.com/akopytov/sysbench/tree/0.5 2.安裝 #進入解壓目錄&#xff0c;并且創建安裝目錄&#xff1a; unzip sysbench-0.5.zip cd sysbench-0.5#安裝依賴包 yum -y install automake autoconf libtool mysql-devel#準備編譯 ./autogen.s…

【初階數據結構】深入解析隊列:探索底層邏輯

初階數據結構相關知識點可以通過點擊以下鏈接進行學習一起加油&#xff01;時間與空間復雜度的深度剖析深入解析順序表:探索底層邏輯深入解析單鏈表:探索底層邏輯深入解析帶頭雙向循環鏈表:探索底層邏輯深入解析棧:探索底層邏輯深入解析隊列:探索底層邏輯深入解析循環隊列:探索…

三、Python日志系統之監控郵件發送

import smtplib from email.mime.text import MIMEText import time import os import datetime from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler# 郵件配置 SMTP_SERVER smtp.example.com SMTP_PORT 587 SMTP_USERNAME your_…

EXISTS、NOT EXISTS、IN和NOT IN辨析

文章目錄 概要EXISTSNOT EXISTSINNOT IN辨析 概要 EXISTS、NOT EXISTS、IN 和 NOT IN 是 SQL 中用于查詢時進行條件判斷的關鍵字&#xff0c;它們在功能上有相似之處&#xff0c;但使用場景和性能表現上有所不同。 EXISTS 1.用途&#xff1a;用于子查詢中&#xff0c;判斷子…

C++:cv.absdiff函數含義

在OpenCV庫中&#xff0c;absdiff函數是一個非常重要的圖像處理函數&#xff0c;其意義在于計算兩個輸入數組&#xff08;通常是圖像&#xff09;之間對應元素差的絕對值。這個函數在圖像處理和計算機視覺領域有著廣泛的應用&#xff0c;如圖像對比、運動檢測等。 函數的基本用…

python第三方庫【numpy.array】的使用(超詳細)

NumPy 是 Python 中用于科學計算的基礎庫之一&#xff0c;它提供了高性能的多維數組對象以及這些數組的操作。NumPy 的核心數據結構是 ndarray&#xff08;N-dimensional array&#xff0c;N維數組&#xff09;&#xff0c;它提供了一種高效的存儲和操作大型多維數組的方法。以…

熬了一晚上,我從零實現了 Transformer 模型,把代碼講給你聽

自從徹底搞懂Self_Attention機制之后&#xff0c;筆者對Transformer模型的理解直接從地下一層上升到大氣層&#xff0c;瞬間打通任督二脈。夜夜入睡之前&#xff0c;那句柔情百轉的"Attention is all you need"時常在耳畔環繞&#xff0c;情到深處不禁拍床叫好。于是…

客戶案例|某大型證券公司數據庫運維場景數據安全實踐

證券行業涉及股票、債券、基金等金融產品的發行、交易和監管&#xff0c;業務具有數據規模大、數據價值高、數據應用場景復雜的顯著特點&#xff0c;其中高速流轉的業務系統中含有海量的客戶個人信息、交易、行情、咨詢等高敏感高價值信息。由于證券期貨業務場景所具有的特殊性…