Springboot與vue實現數據導出方法具體介紹

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔

前言

這兩天在項目中使用到Java的導入導出功能,以前對這塊有一定瞭解,但是沒有系統學習過,今天在這裡進行記錄,方便以後查閱。

一、需求

項目的需求是將項目中的JSON實體數據導出為.json文件,導出的文件,可以作為元數據導入進行實體初始化。項目不是使用普通的springboot框架(普通的springboot框架很容易完成),因此走瞭一些彎路,在這篇文章中,將先講解使用springboot框架進行導出,然後再講解非springboot框架的導出。

二、Springboot進行數據導出

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);
	}
}

導出操作時,返回值類型必須為void,由於項目有指定的返回格式(返回值類型不能為void),導致類型不匹配報錯,在新寫瞭處理方法之後,解決瞭這個問題。 這裡使用瞭BufferedOutputStream,能加快導出速度。不用BufferedOutputStream,隻使用response.getOutputStream()也是可以的。此外,這裡使用瞭循環寫入輸出流中,而不是一次寫入。

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方法第一個參數是導出方法的響應路由,第二個參數為導出時攜帶的參數,第三個參數為導出的文件名稱。

3.其他幾種Java後端導出方法

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);
 }

一次性將數據讀取到內存,通過響應輸出流輸出到前端

2、不使用BufferedOutputStream,循環寫入

InputStream inputStream = new FileInputStream(path);
ServletOutputStream outputStream = response.getOutputStream();
   byte[] b = new byte[1024];
   int len;
   //從輸入流中讀取一定數量的字節,並將其存儲在緩沖區字節數組中,讀到末尾返回-1
   while ((len = inputStream.read(b)) > 0) {
       outputStream.write(b, 0, len);
   }

到此這篇關於Springboot與vue實現數據導出方法具體介紹的文章就介紹到這瞭,更多相關Springboot數據導出內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: