Vue文件上传问题合集

本文详细记录了在Vue+ElementUI环境中,如何解决文件上传过程中的文件名回显、上传前的加载状态显示以及将文件上传设为必填项的问题。通过设置`:file-list`、`:show-file-list`、`:on-progress`等属性,实现了上传文件后的回显、进度条显示和必填项验证。同时提供了相关代码示例和参考资料。
摘要由CSDN通过智能技术生成

目录

1.背景

2.环境

3.问题集

1)文件上传完成后,文件名的回显

2)文件上传完成前的加载状态

3)文件上传作为必填项


1.背景

在使用Vue+ElementUI进行前端工程开发中,遇到一些文件上传的问题,包括上传、回显、等待等。这里做一些记录,方便以后查看

2.环境

npm6.14.12
vue-admin-template4.4.0
axios0.18.1
element-ui2.13.2

3.问题集

1)文件上传完成后,文件名的回显

关键属性el-upload中 :file-list, :show-file-list

详细代码请往后看~~

参考:

https://www.jb51.net/article/183328.htm

vue+elementUI上传图片/文件,编辑时回显文件名_LBJSagiri的博客-CSDN博客

elementUI上传图片回显在编辑 - 写手在作画 - 博客园

根据elementui中的上传组件upload,手写一个编辑时回显上传文件以及继续新增文件的功能 - 简书

 element-ui Upload 上传文件再编辑显示的两种方式_liaoxuewu的博客-CSDN博客

2)文件上传完成前的加载状态

关键属性v-loading和el-upload中:on-progress。

详细代码请往后看~~

参考:

 vue自定义指令v-loading_伴个人993的博客-CSDN博客

【转】Vue v-loading实现加载效果 - 花影疏帘 - 博客园

vue+element-ui中上传文件使用Progress自定义实时更新进度条 - 简书

vue element-ui 上传文件的 :on-progress钩子无法触发的原因及报错原因 - 嘉煠 - 博客园

3)文件上传作为必填项

关键属性 el-form中定义prop和:rules。上传后,必填提示清除

详细代码请往后看~~

参考:

【vue】vue表单必填项前面添加红色*_小朋友的博客-CSDN博客

vue上传文件,文件是必填项的验证 - 吃的快不吐骨头 - 博客园

<template>
  <div v-loading="loading" ref="fileUpload">
	<el-form-item label="文件上传" ref="fileUpload" prop="filepath" :rules="rules.file">	// 必填项以及规则
	   <el-upload
		 v-model="item.filepath"
		 :on-success="handleFileSuccess"
		 :on-remove="handleFileRemove"
		 :before-remove="beforeFileRemove"
		 :on-exceed="handleUploadExceed"
		 :file-list="fileList"            // 文件列表
		 :show-file-list="isShow"        // 文件回显标记
		 :action="'/myService/file/upload'"
		 :limit="1"
		 class="upload-demo"
	   >
		 <el-button size="small" type="primary">上传文件</el-button>
		 <el-tooltip placement="right-end">
		   <div slot="content">只能上传txt文件,且不超过2MB</div>
		   <i class="el-icon-question" />
		 </el-tooltip>
	   </el-upload>
	</el-form-item>
  </div>
</template>

export default {
	data() {
		return {
			loading: false,
			item: {
				filepath: "",
			},
			
			// 必填项规则
			rules: [
				file: {required: true, message:"文件必须上传", trigger: "change"}
			]
		}
	
	},
	handleFileSuccess(response) {
	  this.item.filepath = response.data.items.filepath;		// 后端返回的对象key为items,其中文件链接存放在变量filepath中
	  if (this.item.filepath != null) {
		this.isShow = true;
		this.$message({
		  showClose: true,
		  message: "上传成功!",
		  type: "success",
		});
		(this.rules.file = []), this.$refs.fileUpload.clearValidate();		// 动态删除文件上传必填的提示信息
	  } else {
		this.isShow = false;
		this.fileList = [];
		this.$message({
		  showClose: true,
		  message: "上传失败!",
		  type: "error",
		});
	  }
	  this.loading = false;				// 上传完成后loading状态清楚
	},
	handleUploadExceed() {
	  this.$message.warning("想要重新上传文件,请先删除已上传的文件");
	},
	beforeFileRemove(file, fileList) {
	  return this.$confirm(`确定删除 ${file.name}`);
	},
	handleFileRemove() {
	  this.item.filepath = "";		// 删除文件时清空文件地址
	},
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值