axios同一個接口,同時接收 文件 或者 數據

1、前端代碼

const service = axios.create({baseURL: "http://192.168.2.200:8080/api",timeout: 180000
})// 響應攔截
service.interceptors.response.use(async response => {if(response){// 請求時設置返回blob, 但是實際上可能返回的是json的情況if (response.data instanceof Blob) {if (!response.headers['content-type']?.includes('application/json')) {let a = document.createElement("a");a.setAttribute("href", URL.createObjectURL(response.data));a.setAttribute("download", decodeURI(response.headers['filename']));a.setAttribute("target", "_blank");a.click()return null}// 將后臺返回的內容轉成文本response.data = JSON.parse(await (response.data).text())}return response.data
}, err)

?主要是:if (response.data instanceof Blob)? 判斷是否是 Blob 對象,

否則使用:response.data = JSON.parse(await (response.data).text()) 將后臺返回的內容轉成 文本 返回

const formData = new FormData();
formData.append('id', 1);
formData.append('file', _file.file);const config = {headers: { 'Content-Type': 'multipart/form-data' },responseType: 'blob'
}axios.post('/file/upload', formData, config).then((res: any) => {if (res != null && res.code == 200) {alert("上傳成功");} else {alert("上傳失敗");}})

主要是:responseType: 'blob'

2、后端代碼


@Controller
@RequestMapping("api/file")
public class FileController {@PostMapping("upload")public void upload(MultipartFile file, HttpServletResponse response) {// 緩存文件String tmpDirPath = FileUtil.getTmpDirPath();// 上傳文件名String originalFilename = file.getOriginalFilename();String targetFile = tmpDirPath + File.separator + originalFilename;FileUtil.writeFromStream(file.getInputStream(), targetFile);// 解析文件boolean result = parseFile(targetFile);if(!result){// 解析失敗,返回失敗文件InputStream in = new FileInputStream(targetFile);String filename = "解析失敗_" + System.currentTimeMillis() + "_" + originalFilename;// 告訴瀏覽器輸出內容為流response.setContentType("application/octet-stream;charset=utf-8");// 前端下載時的文件名response.setHeader("filename", URLEncoder.encode(filename, "UTF-8"));// 響應報頭 指示哪些報頭可以 公開 為通過列出他們的名字的響應的一部分。要公開多個自定義標題,可以用逗號分隔// 默認情況下,只顯示6個簡單的響應頭 Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragmaresponse.setHeader("Access-Control-Expose-Headers", "filename");IOUtils.copy(in, response.getOutputStream());} else {response.setContentType("application/json;charset=utf-8");JSONObject jsonObject = new JSONObject();jsonObject.put("code", 200);jsonObject.put("message", "成功");response.getWriter().write(jsonObject.toJSONString());}// 刪除臨時文件FileUtil.del(targetFile);}}

需要注意的是:response.setHeader("Access-Control-Expose-Headers", "filename");

否則前端讀取不到?response.headers['filename'] 的值

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

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

相關文章

[C++]筆記 - 知識點積累

一.運算符的優先級 一共15個級別 最高優先級 : () []最低優先級 :逗號表達式倒數第二低優先級 : 賦值和符合賦值(,,-...) ! >算術運算符 > 關系運算符 > && >> || >賦值運算符 二.數據類型轉換 隱式類型轉換 算數轉換 char int long longlong flo…

解決Java中的“Unchecked cast: java.lang.Object to java.util.List”問題

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

搜索二叉樹

目錄 搜索二叉樹的性質 搜索二叉樹的實現、 插入 刪除 代碼 在以前我們學過二叉樹,但是在對二叉樹的學習中發現,似乎二叉樹并沒有什么作用,要論增刪它比不上鏈表,論隨機訪問也沒法和順序表比,對于當時的我們是一頭霧水,那么現在它的功能終于是體現出來了,這里就是我們要講的…

[Go版]算法通關村第十一關白銀——位運算的高頻算法題

目錄 專題1:位移的妙用題目:位1的個數(也被稱為漢明重量)解法1:遍歷所有位,判斷每個位的數字是否是1Go代碼 解法2:依次消除每個1的位 numnum&(num-1)Go代碼 題目:比特位計數思路…

Mac 卸載appium

安裝了最新版的appium 2.0.1,使用中各種問題,卡頓....,最終決定回退的。記錄下卸載的過程 1.打開終端應用程序 2.卸載全局安裝的 Appium 運行以下命令以卸載全局安裝的 Appium: npm uninstall -g appium 出現報錯:Error: EACCES: permiss…

云安全攻防(十二)之 手動搭建 K8S 環境搭建

手動搭建 K8S 環境搭建 首先前期我們準備好三臺 Centos7 機器,配置如下: 主機名IP系統版本k8s-master192.168.41.141Centos7k8s-node1192.168.41.142Centos7k8s-node2192.168.41.143Centos7 前期準備 首先在三臺機器上都執行如下的命令 # 關閉防火墻…

Python讀取Word統計詞頻輸出到Excel

1.安裝依賴的包 "# 讀取docx\n", "!pip install python-docx\n", "!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx\n", "# 中英文分詞\n", "!pip install jieba\n", "!pi…

postman測試后端增刪改查

目錄 一、本文介紹 二、準備工作 (一)新建測試 (二)默認url路徑查看方法 三、增刪改查 (一)查詢全部 (二)增加數據 (三)刪除數據 (四&…

nginx反向代理流程

一、nginx反向代理流程 反向代理:使用代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡中的上游服務器,并將上游服務器得到的結果返回給請求連接的客戶端,代理服務器對外表現就是一個web服務器。Nginx就經常拿來做…

【內網穿透】如何實現在外web瀏覽器遠程訪問jupyter notebook服務器

文章目錄 前言1. Python環境安裝2. Jupyter 安裝3. 啟動Jupyter Notebook4. 遠程訪問4.1 安裝配置cpolar內網穿透4.2 創建隧道映射本地端口 5. 固定公網地址 前言 Jupyter Notebook,它是一個交互式的數據科學和計算環境,支持多種編程語言,如…

信也科技一面涼經

1.在項目經歷里挑一個詳細介紹一下 項目的應用場景 2.項目里用到多線程是怎么用的?回答:線程池 用通過 ThreadPoolExecutor 構造函數的方式創建的線程池 3.線程池有哪些重要參數?回答:核心線程數、最大線程數、阻塞隊列類型、…

【愛書不愛輸的程序猿】公網訪問本地搭建的WEB服務器之詳細教程

歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本地電腦搭建Web服務器并用cpolar發布至公網訪問 前言1. 首先將PHPStudy、WordPress、cpolar下載到電腦2. 安裝PHPStudy3. 安裝cpolar,進入Web-UI界面4.安裝wordpress5.…

KU Leuven TU Berlin 推出“RobBERT”,一款荷蘭索塔 BERT

荷蘭語是大約24萬人的第一語言,也是近5萬人的第二語言,是繼英語和德語之后第三大日耳曼語言。來自比利時魯汶大學和柏林工業大學的一組研究人員最近推出了基于荷蘭RoBERTa的語言模型RobBERT。 谷歌的BERT(來自Transformers的B idirectional …

C語言 常用工具型API --------system()

函數名: system() 用 法: int system(char *command); 原理: 創建一個子進程去加載一個新程序執行,而Linux命令基本都是一個單獨的進程實現的,所以你所掌握的Linux命令越多,該函數…

AUTOSAR規范與ECU軟件開發(實踐篇)4.2 基于Matlab/Simulink的軟件組件開發

目錄 前言 1 、Matlab/Simulink與AUTOSAR基本概念的對應關系 2 、軟件組件內部行為建模方法

由淺入深學習Tapable

文章目錄 由淺入深學習TapableTapable是什么Tapable的Hook分類同步和異步的 使用Sync*同步類型鉤子基本使用bailLoopWaterfall Async*異步類型鉤子ParallelSeries 由淺入深學習Tapable webpack有兩個非常重要的類:Compiler和Compilation。他們通過注入插件的方式&a…

CentOS系統環境搭建(一)——Centos7更新

Centos7更新 更新 yum(包括centos內核) yum update執行后,系統將更新到centos 7.9。 從這一篇文章開始開始,我將開始在centos系統環境搭建🔗https://blog.csdn.net/weixin_43982359/category_12411496.html中開始對C…

【數據分析入門】Numpy進階

目錄 一、數據重塑1.1 透視1.2 透視表1.3 堆棧/反堆棧1.3 融合 二、迭代三、高級索引3.1 基礎選擇3.2 通過isin選擇3.3 通過Where選擇3.4 通過Query選擇3.5 設置/取消索引3.6 重置索引3.6.1 前向填充3.6.2 后向填充 3.7 多重索引 四、重復數據五、數據分組5.1 聚合5.2 轉換 六、…

回溯算法詳解

目錄 回溯算法詳解 回溯VS遞歸 回溯算法的實現過程 n個結點構造多本節要討論的是當給定 n(n>0)個結點時,可以構建多少種形態不同的樹。 回溯算法詳解 回溯算法,又稱為“試探法”。解決問題時,每進行一步&#…

主成分分析Python代碼

對于主成分分析詳細的介紹:主成分分析(PCA)原理詳解https://blog.csdn.net/zhongkelee/article/details/44064401 import numpy as np import pandas as pd標準PCA算法 def standeredPCA(data,N): #data:…