在vue3项目中使用el-upload实现文件上传

template

		<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
			<el-upload
				ref="uploadRef"
				:limit="1"
				accept=".xlsx, .xls"
				:headers="upload.headers"
				:action="upload.url + '?updateSupport=' + upload.updateSupport"
				:disabled="upload.isUploading"
				:on-progress="handleFileUploadProgress"
				:on-success="handleFileSuccess"
				:auto-upload="false"
				drag>
				<el-icon class="el-icon--upload"><upload-filled /></el-icon>
				<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
				<template #tip>
					<div class="el-upload__tip text-center">
						<div class="el-upload__tip"><el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据</div>
						<span>仅允许导入xls、xlsx格式文件。</span>
						<el-link type="primary" :underline="false" style="font-size: 12px; vert

 - List item

ical-align: baseline" @click="importTemplate">下载模板</el-link>
					</div>
				</template>
			</el-upload>
			<template #footer>
				<div class="dialog-footer">
					<el-button type="primary" @click="submitFileForm">确 定</el-button>
					<el-button @click="upload.open = false">取 消</el-button>
				</div>
			</template>
		</el-dialog>

相关属性说明

  • limit:允许上传文件的最大数量
  • accept:接受上传的文件类型
  • headers:设置上传的请求头部
  • action:请求 URL
  • disabled:是否禁用上传
  • on-progress :文件上传时的钩子
  • on-success:文件上传成功时的钩子
  • auto-upload:是否自动上传文件
  • drag:是否启用拖拽上传

参数数据:

/*** 用户导入参数 */
const upload = reactive({
	// 是否显示弹出层(用户导入)
	open: false,
	// 弹出层标题(批量邀约)
	title: "",
	// 是否禁用上传
	isUploading: false,
	// 是否更新已经存在的用户数据
	updateSupport: 0,
	// 设置上传的请求头部
	headers: { Authorization: "Bearer " + getToken() },
	// 上传的地址
	url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData"
});
  • url:后端给的接口
  • headers:用于进行身份验证

method

/** 下载模板操作 */
function importTemplate() {
	proxy.download("system/user/importTemplate", {}, `user_template_${new Date().getTime()}.xlsx`);
}
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
	upload.isUploading = true;
};
/** 文件上传成功处理 */
const handleFileSuccess = (response, file, fileList) => {
	upload.open = false;
	upload.isUploading = false;
	proxy.$refs["uploadRef"].handleRemove(file);
	proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
	getList();
};
/** 提交上传文件 */
function submitFileForm() {
	proxy.$refs["uploadRef"].submit();
}

handleFileSuccess :该函数是一个处理文件上传成功的回调函数。它关闭上传组件,清除已上传的文件,弹出导入结果提示框,展示导入结果信息,并调用getList函数获取列表数据。

实现效果图

在这里插入图片描述

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐