vue结合flask利用pandas上传并读取excel

背景

项目中使用到前端导入数据,之前都是vue读取excel,然后批量axios分段提交,好处是可以监控上传进度,坏处是批量化axios会导致前端大量占用资源,页面卡顿,让用户体验下降,用户无法离开当前页面,甚至卡死,所以这次选择了使用直接将文件上传到后端进行操作的方式,由于前端使用vue后端使用flask,所以出现了一些问题,折腾了大半个小时,问题其实很简单,但是往往解决问题就是在一层窗户纸的事情。

操作

前端

upFile(){
	let file=this.$refs.importCustomerFile.files[0]
    let param = new window.FormData(); //创建form对象
    param.append('file',file);
    let config = {
        headers:{
            'Content-Type':'multipart/form-data'
        }
    }; 
    this.$http({url:"/imoprtCustomer", method: 'post', data:param}).then(r=> {
        that.getCustomer()
    })
 },

后端

@app.route('/imoprtCustomer' , methods=["GET", "POST"])
def imoprtCustomer():
    file = request.files['file']
    data = pd.read_excel(file)
    print(nasdaq.head(10))

问题

之所以排查问题花了大半个小时主要是之前的问题排查错位置了,因为对flask不熟悉,所以以为是flask接受文件的问题,花了蛮多时间去测试requeset.files的各种方式,发现获取不到数据,后来觉得问题会不会是在formdata上,有文章写到vue中param = new FormData();是无效的必须使用param = new window.FormData();的方式,后来发现问题也不在这里,使用get(‘file’)是可以获取的数据的。后来没办法,只能使用的方式去提交,发现后台能获取到数据,才知道是post的问题,于是将axios的method: ‘post’,后台正常获取到数据

### 实现 Vue 批量导入 Excel 解析 要在 Vue 项目中实现批量导入多个 Excel 表格逐一解析数据的功能,可以通过前端文件上传组件配合后端服务完成。以下是具体方法: #### 前端部分 (Vue) 在 Vue 中可以利用 `input` 文件输入框来获取用户选择的多个 Excel 文件,将其逐个发送到服务器。 ```html <template> <div> <h3>批量导入 Excel</h3> <input type="file" multiple @change="handleFileChange" /> <button @click="uploadFiles">上传解析</button> </div> </template> <script> export default { data() { return { files: [], }; }, methods: { handleFileChange(event) { this.files = Array.from(event.target.files); }, async uploadFiles() { const formData = new FormData(); this.files.forEach((file, index) => { formData.append(`file_${index}`, file); // 将每个文件附加到表单对象中 }); try { await fetch('/api/upload', { // 替换为实际 API 地址 method: 'POST', body: formData, }); console.log('上传成功'); } catch (error) { console.error('上传失败:', error); } }, }, }; </script> ``` 上述代码实现了多文件的选择功能,通过 `FormData` 对象将这些文件打包成键值对形式提交给后端接口 `/api/upload`[^3]。 --- #### 后端部分 (Node.js + Pandas 或其他工具) 为了支持批量解析 Excel 数据,在后端可以选择 PythonFlask 或 Node.js 来接收请求将文件交给 Pandas 处理。 ##### 使用 PythonPandas 解析 Excel Python 提供了强大的 Pandas 库用于处理 Excel 数据。以下是一个简单的 Flask 路由示例: ```python from flask import Flask, request import pandas as pd app = Flask(__name__) @app.route('/api/upload', methods=['POST']) def upload_files(): results = [] for key in request.files: file = request.files[key] df = pd.read_excel(file) # 使用 Pandas 加载 Excel 文件 processed_data = process_dataframe(df) # 自定义函数处理 DataFrame results.append(processed_data) return {'results': results} def process_dataframe(dataframe): """自定义的数据处理逻辑""" summary = dataframe.describe().to_dict() return summary if __name__ == '__main__': app.run(debug=True) ``` 此代码片段展示了如何使用 Pandas (`pd`) 读取 Excel 文件返回其描述性统计信息作为 JSON 格式的响应[^2]。 --- #### 整合前后端流程 1. 用户通过 Vue 页面上的 `<input>` 组件选择多个 Excel 文件。 2. 当点击按钮时,调用 `uploadFiles()` 方法向后端发起 POST 请求。 3. 后端接收到文件后,循环遍历每一份文件通过 Pandas 进行解析。 4. 返回的结果可进一步展示于页面上或者存储至数据库中。 --- ### 注意事项 - **文件大小限制**:需考虑浏览器和服务器对于大文件的支持情况,必要时增加分片传输机制。 - **错误处理**:确保加入异常捕获以应对可能发生的网络中断或其他意外状况。 - **安全性验证**:防止恶意文件攻击,建议仅允许特定类型的 Excel 文档(如 `.xlsx`, `.xls`)被上传。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值