上传图表文件处理数据流

1. 使用原生input的标签,type为file

<template>
	<form>
		<input
			ref='upload_sheet'
			placeholder="请输入内容"
			type="file"
			accept="*"
			id="sheet_form"
			@click="resetValue"
			@change="temUpload($event)"
		/>
	</form>
	<p class="boxs type_tips">
		只能上传xlsx或csv类型的文件,且不超过{{file_limit}}KB
	</p>
</template>
<span slot="footer" class="dialog-footer">
	<el-button @click="upLoadSheet(false)">取 消</el-button>
	<el-button type="primary" @click="upLoadSheet(true)">确 定</el-button>
</span>

多次上传文件,如果文件名相同,文件重新上传失败的问题:文件名相同,change事件没有触发;
解决办法:在input上同时绑定click和change事件,click先执行,每次click触发的时候,重置input的vulue值为空字符串

resetValue(){
	// 清除数据上传的信息
	// 用户点击输入框的时候,清处上次保存的文件名
	// 入股不清除,两次文件名相同的话,change时间不会触发
	this.file_value=null;//清除上传的表数据
	this.$refs.upload_sheet.value='';//清除表的文件名
},

2. 暂存上传的表格

temUpload(event) {
	this.file_value = event.target.files[0]; //获取文件
	// console.log(file_value);
	const check_result=this.handleExceed(this.file_value);
	if(check_result===false){
		this.resetValue()
	}
}

3. 确认按钮上传表数据

3.1:设置header:header: {
			"Content-Type": "multipart/form-data"
		},
3.2:newParams=new FormData(),使用FormData格式化数据
		for (let key in params) {
			newParams.append(key, params[key])
		}
3.3:processData: false:不使用默认方式处理数据
async upLoadSheet(onoff){
	// 上传表格或却取消上传,关闭el_dialog
	if(onoff===true&&this.file_value!=null){
		const params = {
			file:this.file_value
		};
		const config = {
			header: {
				"Content-Type": "multipart/form-data"
			},
			processData: false
		}
		const res = await this.$Http.table_upload(params, '', true, config)
		console.log(res)
		if(res.statusText==='OK'){
			this.global_utils.responseTips.call(this,`${res.data},上传成功!`)
		}
		this.upload_table_switch=false;
	}else{
		this.resetValue()
		this.upload_table_switch=false;
	}
}

4.new FileReader()的使用

如果使用el-upload,则需要自己定义文件读取函数,使用 **new FileReader()**的实例方法读文件内容,转成字符串传递给后端;

上一篇:element-ui upload组件手动上传 , 一次请求多张图片合并上传到PHP后台


下一篇:ant.design select option获取额外的属性