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!
推薦閱讀:
- Springboot導出文件,前端下載文件方式
- Java下載文件的四種方式詳細代碼
- Java中字節流和字符流的理解(超精簡!)
- Vue通過阿裡雲oss的url連接直接下載文件並修改文件名的方法
- 如何解決springmvc文件下載,內容損壞的問題