摘要:一前言本文章將以報(bào)表下載為例,給大家介紹三種文件下載的方式。通過二進(jìn)制數(shù)據(jù)流的方式下載這種方式是我目前采用的方式,用于處理報(bào)表下載。缺點(diǎn)對(duì)于數(shù)據(jù)量不大的文件,這種方式是可行的。
一、前言
本文章將以excel報(bào)表下載為例,給大家介紹三種文件下載的方式。
原文地址:簡(jiǎn)談文件下載的三種方式 | Rychou
二、正文 1. 通過服務(wù)器文件地址下載這是最常見的文件下載方式,大多數(shù)網(wǎng)站的音頻、視頻、種子文件等文件的下載方式都是通過這種方式實(shí)現(xiàn)的。
這種方式具體的實(shí)現(xiàn)方式是這樣的:
前端請(qǐng)求獲取excel報(bào)表的下載地址
后端根據(jù)前端的請(qǐng)求,查詢數(shù)據(jù)庫(kù)并把查詢結(jié)果保存到服務(wù)器的一個(gè)excel文件中
后端把這個(gè)excel文件地址返回給前端
前端將此excel文件地址賦值給一個(gè),并點(diǎn)擊此標(biāo)簽,利用瀏覽器的默認(rèn)行為下載此文件。
優(yōu)點(diǎn):實(shí)現(xiàn)方式簡(jiǎn)單,通用。2. 通過二進(jìn)制數(shù)據(jù)流的方式下載
缺點(diǎn):需要把文件保存到服務(wù)器,會(huì)占用服務(wù)器資源。這個(gè)缺點(diǎn)也有解決方式:給保存的文件設(shè)定一個(gè)時(shí)效性,過了這個(gè)時(shí)效,服務(wù)器就會(huì)刪除這個(gè)文件。
這種方式是我目前采用的方式,用于處理報(bào)表下載。
這種方法的具體實(shí)現(xiàn)流程如下:
前端請(qǐng)求獲取excel報(bào)表的二進(jìn)制數(shù)據(jù)流
后端根據(jù)前端請(qǐng)求,查詢數(shù)據(jù)庫(kù)并把查詢結(jié)果轉(zhuǎn)成二進(jìn)制數(shù)據(jù)流。注意:這里并不生成一個(gè)文件保存在服務(wù)器
后端把二進(jìn)制數(shù)據(jù)流返回給前端
前端把二進(jìn)制數(shù)據(jù)流轉(zhuǎn)成URL對(duì)象并賦值給標(biāo)簽
點(diǎn)擊標(biāo)簽實(shí)現(xiàn)下載
我用的是axios網(wǎng)絡(luò)請(qǐng)求庫(kù)
代碼示例:
axios({ url: "/monitors/export", method: "GET", responseType: "blob",//指定返回?cái)?shù)據(jù)格式 }).then(res => { // 將二進(jìn)制數(shù)據(jù)流轉(zhuǎn)成URL對(duì)象 const url = window.URL.createObjectURL( new Blob([res.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8", }), ); const link = document.createElement("a"); link.href = url; link.setAttribute("download", "車輛監(jiān)控列表.xls"); // 需要指定文件格式。 document.body.appendChild(link); link.click(); //點(diǎn)擊事件 });
優(yōu)點(diǎn):不需要服務(wù)器生成文件,并保存到服務(wù)器中,可以有效減少服務(wù)器資源占用。3. 前端下載
缺點(diǎn):這種方式可能并不那么通用,也可能有一定的兼容性問題。
這種方式是我測(cè)試過,確實(shí)可行的一種方法,它的具體實(shí)現(xiàn)原理是這樣的,前端通過類似export-from-json的庫(kù),把JSON格式的報(bào)表數(shù)據(jù),導(dǎo)出到excel文件中。
優(yōu)點(diǎn):不需要為下載多帶帶發(fā)起一次網(wǎng)絡(luò)請(qǐng)求,直接把保存在前端的請(qǐng)求的報(bào)表數(shù)據(jù),導(dǎo)出到excel文件即可。
缺點(diǎn):對(duì)于數(shù)據(jù)量不大的文件,這種方式是可行的。但是對(duì)于數(shù)據(jù)量很大,像幾千幾萬(wàn)條數(shù)據(jù)的話,性能緩慢是它最大的弊端。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72012.html
摘要:一前言本文章將以報(bào)表下載為例,給大家介紹三種文件下載的方式。通過二進(jìn)制數(shù)據(jù)流的方式下載這種方式是我目前采用的方式,用于處理報(bào)表下載。缺點(diǎn)對(duì)于數(shù)據(jù)量不大的文件,這種方式是可行的。 一、前言 本文章將以excel報(bào)表下載為例,給大家介紹三種文件下載的方式。 原文地址:簡(jiǎn)談文件下載的三種方式 | Rychou 二、正文 1. 通過服務(wù)器文件地址下載 這是最常見的文件下載方式,大多數(shù)網(wǎng)站的音頻...
摘要:常量接口是對(duì)接口的一種不良使用。如果這些常量最好被看作是枚舉類型成員,那就應(yīng)該用枚舉類型來(lái)導(dǎo)出。因?yàn)榭蛻舳思炔荒軇?chuàng)建枚舉類型的實(shí)例,也不能對(duì)它進(jìn)行擴(kuò)展,因此很可能沒有實(shí)例,而只有聲明過的枚舉常量。換句話說(shuō),枚舉類型是實(shí)例受控的。 問題 我們偶爾能在項(xiàng)目中看到如下風(fēng)格的代碼: public class ResponseCode { public static final int ...
摘要:而用關(guān)鍵字調(diào)用構(gòu)造器,總是會(huì)創(chuàng)建一個(gè)新的對(duì)象,無(wú)論內(nèi)容是否相同。中對(duì)象的哈希碼被頻繁地使用比如在等容器中。字符串不變性保證了碼的唯一性因此可以放心地進(jìn)行緩存。對(duì)于所有包含方式新建對(duì)象包括的連接表達(dá)式,它所產(chǎn)生的新對(duì)象都不會(huì)被加入字符串池中。 前言 前陣子和同事在吃飯時(shí)聊起Java的String,覺得自己之前的筆記寫的略顯零散。故此又重新整理了一下。 String在Java中算是一個(gè)有意...
摘要:所以經(jīng)??吹降恼f(shuō)閉包就是綁定了上下文環(huán)境的函數(shù)。我更偏向于閉包是一個(gè)函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。里面的閉包先上一個(gè)閉包該例子的解釋上面的代碼,在函數(shù)里面定義的函數(shù)和這個(gè)函數(shù)聲明的詞法環(huán)境就形成了一個(gè)閉包。 閉包是什么 第一種說(shuō)法:閉包創(chuàng)建一個(gè)詞法作用域,這個(gè)作用域里面的變量被引用之后可以在這個(gè)詞法作用域外面被自由訪問,是一個(gè)函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合 第二種說(shuō)法:閉包就是...
閱讀 2930·2023-04-26 01:01
閱讀 3697·2021-11-23 09:51
閱讀 2526·2021-11-22 14:44
閱讀 3615·2021-09-23 11:57
閱讀 2845·2021-09-22 14:58
閱讀 5887·2021-09-10 11:25
閱讀 2113·2019-08-30 13:11
閱讀 1602·2019-08-30 12:59