Vue2/Python 实现文件通过post接口上传到后端并进行读取

相关技术栈

前端:Vue2 + Element-ui +axios

后端:Python + Flask-restful + pandas

实现思路:前端页面通过el-upload组件来上传文件,并通过接口将文件和其他数据打包发送到后端;后端通过pandas库的功能实现对文件的读取,并根据读取的数据进行一些具体的操作。

接口方法实现:

 

传输文件需要设置Content-Type为'multipart/formdata',即设置请求体为formdata格式。

前端页面代码:

关键属性:

设置ref="upload",以在后续实现点击按钮触发上传;

设置auto-upload='false'阻止自动上传;

设置action='#',因为action中填入url之后,无法再自定义请求体的内容,只会把文件直接传输过去。这里还需要传token,所以用http-request覆写默认的上传行为(action)。

js部分:

submitUpload: function() {
	this.$refs.upload.submit(); // 触发http-request提交操作
},

为了实现点击创建按钮后触发上传,需要在按钮绑定的submitUpload方法中触发el-upload的提交。

createBacktests: function(options) {
	var myfile = options.file;
    // 文件为空校验
	if(!myfile){
		this.$message({
			message: "不可上传空文件",
			ype: 'error'
		});
		return;
	}
	else{
		addBacktests(myfile)
		.then((res) =>{
            // 处理接口返回
		})
		.catch(error => {
            // 处理异常
		});
	}
}

从options中读取file文件,若为多个文件上传,可以读取fileList来上传。

后端代码:

def post(self):
    readContent = pd.read_excel(request.files['file']) 
    # 通过'file'名从请求体的body中读取文件,并通过pd.read_excel以excel形式读文件
    instances = []
    # 具体实现部分,仅作参考:
    # 创建会话
    with session_scope(name=self.engine_name) as session:
        # 逐行读取excel内的数据并根据数据创建实例
        for row in readContent.itertuples():
            body = {'name': row[1],'portfolios_path': row[2],'benchmark': row[3],'options': row[4],'begin_date': row[5],'end_date': row[6]}
            instance = create(self, session, body)
            instances.append(instance)
        return self.to_result(instances)

 

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于Vue和Element UI的文件上传组件案例: 1. 首先,在Vue组件中引入Element UI的上传组件: ```html <template> <div> <el-upload class="upload-demo" :action="uploadUrl" :on-success="handleUploadSuccess" :before-upload="beforeUpload" :show-file-list="false" :headers="headers"> <el-button size="small" type="primary">点击上传</el-button> </el-upload> </div> </template> <script> export default { data() { return { uploadUrl: 'your_upload_url', // 上传文件后端接口地址 headers: { // 可以在这里设置请求头,如认证token等 } } }, methods: { beforeUpload(file) { // 在上传之前的操作,可以在这里对文件进行限制,如大小、格式等 return true }, handleUploadSuccess(response, file, fileList) { // 上传成功的回调函数,可以在这里对上传成功后的结果进行处理 } } } </script> ``` 2. 在后端编写接口来接受上传的文件,并进行处理: ```python from flask import Flask, request app = Flask(__name__) @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] # 获取上传的文件对象 file.save('path/to/save/file') # 将文件保存到指定路径 # 在这里可以进行对上传文件的操作,如读取文件内容等 return 'Upload success' if __name__ == '__main__': app.run() ``` 需要注意的是,上传文件后端接口需要支持文件上传,可以使用Flask中的`Flask-Uploads`或`werkzeug`库来实现。同时,在前端上传文件时需要将文件数据以FormData的形式发送到后端,可以使用Axios或Fetch等库来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值