vue 后臺返回的文件流進行預覽_vue實現下載文件流完整前后端代碼

這篇文章主要為大家詳細介紹了vue實現下載文件流完整前后端代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

使用Vue時,我們前端如何處理后端返回的文件流

首先后端返回流,這里我把流的動作拿出來了,我很多地方要用

/**

* 下載單個文件

*

* @param docId

*/

@GetMapping("/download/{docId}")

public void download(@PathVariable("docId") String docId,

HttpServletResponse response) {

outWrite(response, docId);

}

/**

* 輸出文件流

* @param response

* @param docId

*/

private void outWrite(HttpServletResponse response, String docId) {

ServletOutputStream out = null;

try {

out = response.getOutputStream();

// 禁止圖像緩存。

response.setHeader("Pragma", "no-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

byte[] bytes = docService.downloadFileSingle(docId);

if (bytes != null) {

MagicMatch match = Magic.getMagicMatch(bytes);

String mimeType = match.getMimeType();

response.setContentType(mimeType);

out.write(bytes);

}

out.flush();

} catch (Exception e) {

UnitedLogger.error(e);

} finally {

IOUtils.closeQuietly(out);

}

}

前端這里我引入了一個組件 js-file-download

npm install js-file-download --save

然后在Vue文件中添加進來

import fileDownload from "js-file-download";

// 文檔操作列對應事件

async handleCommand(item, data) {

switch (item.key) {

case "download":

var res = await this.download(data);

return fileDownload(res, data.name);

...

default:

}

// 刷新當前層級的列表

const folder = this.getLastFolderPath();

this.listClick(folder.folderId, folder.name);

},

// 下載

async download(row) {

if (this.isFolder(row.type)) {

return FolderAPI.download(row.id);

} else {

return DocAPI.download(row.id);

}

},

docAPI js 注意需要設置responseType

/**

* 下載單個文件

* @param {*} id

*/

const download = (id) => {

return request({

url: _DataAPI.download + id,

method: "GET",

responseType: 'blob'

});

};

這樣即可成功下載。

關于vue.js的學習教程,請大家點擊專題vue.js組件學習教程、Vue.js前端組件學習教程進行學習。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

來源:腳本之家

鏈接:https://www.jb51.net/article/199923.htm

申請創業報道,分享創業好點子。點擊此處,共同探討創業新機遇!

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

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

相關文章

OSPF-5類LSA和4類LSA

# 5類LSA :外部路由前綴 ASBR的router_id IOU5#sh ip ospf data extOSPF Router with ID (5.5.5.5) (Process ID 1)Type-5 AS External Link StatesLS age: 71Options: (No TOS-capability, DC, Upward)LS Type: AS External LinkLink State ID: 10.1.55.0 (Extern…

2014年9月計算機二級mysql真題_2017年9月全國計算機二級MySQL考試章節練習題

2017年9月全國計算機二級MySQL考試章節練習題計算機二級考試成績在“及格”,即60~89分者,由教育部考試中心發合格證書,考試成績在“優秀”,即90~100分者,由教育部考試中心發優秀證書。這是小編給大家提供的2017年9月全…

macOS 10.11.* 安裝scrapy

1.安裝brew,然后修改brew源為某高校 2.更新python brew install python 3.安裝pip 4.安裝scrapy,這里肯定會有一個坑,之前在網上看到10.11開啟了什么rootless的東西, 會遇到安裝six失敗,原因是由于系統安裝了six&#…

eclipse使用小技巧

1. eclipse自帶內存監視及回收插件 菜單 Window > Preferences > General > 右邊,把 Show Heap Status 打上勾就會在右下角任務欄顯示內存監視器,并且可以點擊內存回收。 2. http://www.eclipse.org/downloads/3. 摘錄熱鍵篇:Template&#xff…

mysql @ $_mysql常見筆試題

一、Mysql常見筆試題1、Mysql 中有哪幾種鎖?(1)表級鎖:開銷小,加鎖快。不會出現死鎖,鎖定粒度大,發生鎖沖突的概率高,并發度低。(2)行級鎖:開銷大,加鎖慢。會出現死鎖,鎖…

mysql無法與外部健形成約束_MySQL Rails:錯誤:150“外鍵約束不正確”

我試圖遷移我的Rails MySQL數據庫,我收到以下錯誤:ActiveRecord :: StatementInvalid:Mysql2 :: Error:無法創建表development.comments(錯誤:150“外鍵約束形成錯誤”):CREATE TABLE注釋(id int AUTO_INCR…

按角度構建切變矩陣

切變是坐標系的變換,非均勻的拉伸。切變時候,角度變化,但是面積或體積不變。也可以理解為坐標軸間的角度變化,造成的扭曲。 如下圖,這是x坐標根據y坐標的切變,機器人的y坐標沒有變化,只有x坐標變…

java 語法_Java基礎語法

標識符定義給包,類,方法,變量起名字的符號。組成規則標識符由字母、數字、下劃線、美元符號組成。命名原則:見名知意包名:全部小寫,多級包用.隔開。舉例:com.jourwon類、接口:一個單詞首字母大寫,多個單詞每個單詞的首字母大寫。舉…

POJ1061:青蛙的約會——題解

http://poj.org/problem?id1061 Description 兩只青蛙在網上相識了,它們聊得很開心,于是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,于是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的…

用了mysql報oracle錯誤_mysql數據遷移到oracle錯誤總結

最近處理一個需求,使用腳本方式將mysql里的數據遷移到oracle中。處理思路主要是利用mysqldump導出的insert dump文件,oracle中建立相同表結構執行insert。記錄本次操作中遇到的問題與處理方式:1、超4000字節字符串導入問題描述oracle varchar…

運行Hadoop自帶的wordcount單詞統計程序

1.使用示例程序實現單詞統計 (1)wordcount程序 wordcount程序在hadoop的share目錄下,如下: 123456789[rootleaf mapreduce]# pwd /usr/local/hadoop/share/hadoop/mapreduce[rootleaf mapreduce]# ls hadoop-mapreduce-client-app…

java for 線程_如何在for循環中使用多線程

import java.util.concurrent.Executor;import java.util.concurrent.Executors;public class Test {private final static Executor executor Executors.newCachedThreadPool();//啟用多線程public static void main(String[] args) {for(int i0;i<3;i){final int ji; …

office2010安裝出現錯誤1935的解決方法

安裝Office2010 professional plus 2010過程中彈出錯誤&#xff0c;提示錯誤 1935&#xff0c;安裝程序集組件的過程中發生錯誤。HRESULT:0x800070BC9 如下圖所示&#xff1a; 這個錯誤是由于電腦.net framework 未安裝或安裝有錯誤導致的。解決方法為&#xff1a;下載.net fra…

java linux 服務_java項目部署Linux服務器幾種啟動方式總結經驗

一&#xff1a;兩種部署包&#xff1a;部署之前先說下兩種包&#xff0c;java項目部署到服務器一般有用war包的&#xff0c;也有用jar包的&#xff0c;微服務spring-cloud普及后大部分打包都是jar&#xff0c;部署之前先搞清楚自己要打war包還是jar包&#xff0c;下面小介紹兩種…

HTML溫故知新1

什么是 HTML&#xff1f; HTML 是用來描述網頁的一種語言。 HTML 指的是超文本標記語言 (Hyper Text Markup Language)HTML 不是一種編程語言&#xff0c;而是一種標記語言 (markup language)標記語言是一套標記標簽 (markup tag)HTML 使用標記標簽來描述網頁 HTML 標簽 HTML 標…

java 接口與包_java常用類包接口

類StringIntegerLongFileDateThread(java.lang.ThreadThread類的定義&#xff1a;public class Thread extends Object implements Runnable)包java.lang.*;java.io.*;java.util.*;java.sql.*;java.math.*;接口:ComparableCollectionMapListRunnable(java.lang.Runnable 該接口…

當使用easyui時,表單的onchange事件失效

功能&#xff1a;新增信徒頁面&#xff0c;當選擇未受洗&#xff0c;設置受洗時間&#xff0c;教堂選項 disabled。 步驟&#xff1a; 在<select>標簽里加入 οnchange"xxxxx()"。 在js里編寫xxxxx()方法。 測試 教堂選項沒有 disabled。 原因&#xff1…

shell腳本:批量修改文件名(文件名中添加字符)

舉例如下&#xff1a;批量創建10個隨機字符串的文件&#xff0c;要求每個文件名后面添加_aaa,后綴名不變&#xff1b; [rootlocalhost goodboy]# ls adddbbdedf.html baacjaiija.html bhcfaabcfh.html dgjdcdfbca.html efejadfdji.html agdhcdeaje.html bgffbffjcg.html …

java 格式化小數_java-如何格式化小數位數精度

正如評論中指出的那樣,如果您只有一個String表示形式,那么就無法判斷它實際上是否有重復的部分,或者精度是否不夠高.更新我正在研究一個用分子和分母表示為BigIntegers的有理數的類(并假定盡可能地簡化).在那里,我實現了一種以十進制字符串形式表示的方法,并提出了以下方法&…

當使用easyui時,jquery的設置disabled屬性方法失效

功能&#xff1a;選擇未受洗&#xff0c;設置受洗時間&#xff0c;教堂選項 disabled 步驟&#xff1a; 使用了常規的jquery的方法 //兩種方法設置disabled屬性$(#areaSelect).attr("disabled",true);$(#areaSelect).attr("disabled","disabled&quo…