Springboot與vue實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出方法具體介紹
提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
前言
這兩天在項(xiàng)目中使用到Java的導(dǎo)入導(dǎo)出功能,以前對這塊有一定了解,但是沒有系統(tǒng)學(xué)習(xí)過,今天在這里進(jìn)行記錄,方便以后查閱。
一、需求
項(xiàng)目的需求是將項(xiàng)目中的JSON實(shí)體數(shù)據(jù)導(dǎo)出為.json文件,導(dǎo)出的文件,可以作為元數(shù)據(jù)導(dǎo)入進(jìn)行實(shí)體初始化。項(xiàng)目不是使用普通的springboot框架(普通的springboot框架很容易完成),因此走了一些彎路,在這篇文章中,將先講解使用springboot框架進(jìn)行導(dǎo)出,然后再講解非springboot框架的導(dǎo)出。
二、Springboot進(jìn)行數(shù)據(jù)導(dǎo)出
1.Java后端代碼
@RequestMapping("/download")
public void download(String path, HttpServletResponse response) {
// 固定寫法
response.setContentType("application/OCTET-STREAM;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
File file = new File(path);
try {
InputStream fis = new FileInputStream(file);
OutputStream out = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
out.write(buffer, 0, len);
out.flush();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
導(dǎo)出操作時(shí),返回值類型必須為void,由于項(xiàng)目有指定的返回格式(返回值類型不能為void),導(dǎo)致類型不匹配報(bào)錯(cuò),在新寫了處理方法之后,解決了這個(gè)問題。 這里使用了BufferedOutputStream,能加快導(dǎo)出速度。不用BufferedOutputStream,只使用response.getOutputStream()也是可以的。此外,這里使用了循環(huán)寫入輸出流中,而不是一次寫入。
2.Vue前端代碼
handleExport(row) {
const id = row.id || this.ids
const name = row.name || this.names[0]
const code = row.code || this.codes
const params = {
exportCodes: JSON.stringify(code)
}
this.download('/Thingmax/Things/Export', params, name + '.json')
},
download方法第一個(gè)參數(shù)是導(dǎo)出方法的響應(yīng)路由,第二個(gè)參數(shù)為導(dǎo)出時(shí)攜帶的參數(shù),第三個(gè)參數(shù)為導(dǎo)出的文件名稱。
3.其他幾種Java后端導(dǎo)出方法
1、使用BufferedOutputStream,一次性寫入
exportEntities.put("Entities", entities);
String content = exportEntities.toJSONString();
try {
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
out.write(content.getBytes(StandardCharsets.UTF_8));
out.flush();
out.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
一次性將數(shù)據(jù)讀取到內(nèi)存,通過響應(yīng)輸出流輸出到前端
2、不使用BufferedOutputStream,循環(huán)寫入
InputStream inputStream = new FileInputStream(path);
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[1024];
int len;
//從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)字節(jié)數(shù)組中,讀到末尾返回-1
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
到此這篇關(guān)于Springboot與vue實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出方法具體介紹的文章就介紹到這了,更多相關(guān)Springboot數(shù)據(jù)導(dǎo)出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+kaptcha實(shí)現(xiàn)圖片驗(yàn)證碼功能詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何結(jié)合kaptcha實(shí)現(xiàn)圖片驗(yàn)證碼功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-01-01
IntelliJ IDEA 創(chuàng)建spring boot 的Hello World 項(xiàng)目(圖解)
這篇文章主要介紹了IntelliJ IDEA 創(chuàng)建spring boot 的Hello World 項(xiàng)目的步驟詳解,需要的朋友可以參考下2018-01-01
Eclipse遠(yuǎn)程debug的步驟與注意事項(xiàng)
今天小編就為大家分享一篇關(guān)于Eclipse遠(yuǎn)程debug的步驟與注意事項(xiàng),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
Mybatis-Plus使用@TableField實(shí)現(xiàn)自動(dòng)填充日期的代碼示例
數(shù)據(jù)庫中經(jīng)常有create_time,update_time兩個(gè)字段,在代碼中設(shè)置時(shí)間有點(diǎn)太麻煩了?mybatis-plus可以幫我們自動(dòng)填充,本文主要介紹了Mybatis-Plus使用@TableField實(shí)現(xiàn)自動(dòng)填充日期的代碼示例,感興趣的可以了解一下2022-04-04
Java實(shí)現(xiàn)二分查找樹及其相關(guān)操作
二分查找樹是一種有組織的二叉樹。我們可以通過鏈接節(jié)點(diǎn)表示這樣一棵樹,二分查找樹(Binary Search Tree)的基本操作有搜索、求最大值、求最小值、求前驅(qū)、求后繼、插入及刪除,對java二分查找樹相關(guān)知識(shí)感興趣的朋友一起看看吧2021-07-07

