前后端分离,导出数据为文件或下载文件,前端如何处理后端返回的数据

本文介绍了一种利用浏览器处理二进制文件流的方法,通过前端调用后端接口实现导出Word功能。具体步骤包括:使用encodeURI编码前端数组确保后端能正确接收,再通过window.open打开特定URL获取二进制文件流。

利用浏览器处理二进制文件流,之间用浏览器访问接口地址,代码如下:

var pathName=window.document.location.pathname;
var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
window.open(projectName+"/gen/autogen/generate?subMenuIds="+encodeURI(subMenuIds)+"&projectName="+vm.projectName);

需要注意subMenuIds是前端数组,需要编码后后端才能正常接收,vm.projectName为字符串

后端返回的是二进制文件流

https://www.cnblogs.com/sunshine6/p/8296945.html

前后端分离restful风格后端如何传文件给前端提供导出word功能

https://segmentfault.com/q/1010000013810978

### 若依前后端分离架构中实现组合数据并通过文件流返回 在若依前后端分离的架构中,要实现组合数据并以文件流的形式返回前端,通常涉及以下几个方面: #### 1. **后端数据处理** 在后台的数据处理阶段,需要先完成业务逻辑操作并将所需数据进行整理和组合。假设我们需要将多个表中的数据提取出来,并将其转换为适合导出的格式。 使用 Java 的 `OutputStream` 者其他类似的类来构建文件流响应。以下是具体代码示例: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; @RestController public class DataExportController { @GetMapping("/exportData") public void exportData(HttpServletResponse response) throws IOException { // 设置 HTTP 响应头信息 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=data.csv"); // 组合后的数据列表 (模拟) List<String> dataList = getDataList(); try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()))) { for (String data : dataList) { writer.write(data); writer.newLine(); } } catch (IOException e) { throw new RuntimeException(e.getMessage()); } } private List<String> getDataList() { // 此处调用服务层方法获取实际数据 return List.of("Row1,ValueA", "Row2,ValueB"); } } ``` 上述代码实现了通过 GET 请求 `/exportData` 接口下载 CSV 文件的功能[^4]。 --- #### 2. **前段请求接口** 在前端部分,可以通过 Axios 库发起请求并接收文件流。以下是一个 Vue.js 中的例子: ```javascript methods: { downloadFile() { axios({ url: '/api/exportData', // 对应后端接口地址 method: 'GET', responseType: 'blob' // 表明服务器会返回二进制数据 }).then((response) => { const blob = new Blob([response.data], { type: 'text/csv;charset=utf-8;' }); const linkElement = document.createElement('a'); const href = URL.createObjectURL(blob); // 创建临时链接 linkElement.href = href; linkElement.download = "data.csv"; // 下载文件名 document.body.appendChild(linkElement); linkElement.click(); // 自动触发点击事件 document.body.removeChild(linkElement); // 清理创建的 DOM 元素 window.URL.revokeObjectURL(href); // 释放对象 URL }); } } ``` 此代码片段展示了如何从前端后端发送请求以及保存接收到的文件流作为本地文件[^5]。 --- #### 3. **动态菜单配置与文件路径设置** 动态菜单由后端传递 JSON 数据前端渲染而成。这涉及到 Sidebar 文件夹下的 index.js 配置项[v-for 循环绑定][^1]。而关于上传路径,则需关注 Profile 节点定义的位置及其默认值设定[^2]。 当调整项目名称者模块描述等内容时,除了更改前端显示文字外还需要同步更新 Java 工程内的字符串资源[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值