当前位置: 首页 > news >正文

el-upload文件上传(只能上传一个文件且再次上传替换上一个文件) vue3+vite+ts

组件:

<template><el-upload class="upload-demo" v-model:file-list="fileList" ref="uploadDemo" action="/public-api/api/file" multiple:on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" :on-exceed="handleExceed":before-upload="beforeUpload" :on-success="success" :on-change="change"><el-button type="primary">上传</el-button></el-upload>
</template>
<script lang="ts" setup>
import { ref } from 'vue'import type { UploadProps, UploadUserFile, UploadRawFile, UploadFile, UploadFiles } from 'element-plus'const emit = defineEmits(['fileREquestFn'])const fileList = ref<UploadUserFile[]>([// {//     name: 'element-plus-logo.svg',//     url: 'https://element-plus.org/images/element-plus-logo.svg',// },
])const uploadDemo = ref()const fileId = ref(null)const change = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {console.log(uploadFile, uploadFiles)
}const success = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {console.log(response, uploadFile, uploadFiles, 'ddddd')if (response.status == 200) {uploadDemo.value.clearFiles()ElMessage.success("上传成功")emit("fileREquestFn", '上传成功后需要传到父级的数据...')fileId.valid = response.data.id}fileList.value.push({ name: uploadFile.name, url: 'https://element-plus.org/images/element-plus-logo.svg' })
}const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => {console.log(file, uploadFiles)
}const handlePreview: UploadProps['onPreview'] = (uploadFile) => {console.log(uploadFile)const url = `/public-api/api/file/${fileId.value}`; // 替换为你要下载的文件的URLconst link = document.createElement('a');link.href = url;link.target = '_blank'; //当前页link.download = uploadFile.name; // 替换为你想要保存的文件名link.click();
}const beforeUpload = (rawFile: UploadRawFile) => {console.log(rawFile, '上传前')// const isFile = rawFile.type === 'application/vnd.ms-excel'// if (!isFile) {//     ElMessage("只支持Excel文件上传")//     return// }
}const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => {ElMessage.warning(`The limit is 3, you selected ${files.length} files this time, add up to ${files.length + uploadFiles.length} totally`)
}const beforeRemove: UploadProps['beforeRemove'] = (uploadFile) => {return ElMessageBox.confirm(`Cancel the transfer of ${uploadFile.name} ?`).then(() => true,() => false)
}
</script>
<style lang="less" scoped>
.upload-demo {width: 100%;height: 40px;position: relative;display: flex;align-items: center;:deep(.el-upload) {position: absolute;left: 200px;top: 0;height: 35px;.el-button {height: 36px;border: none;border-radius: 0%;border-top-right-radius: 5px;border-bottom-right-radius: 5px;}}:deep(.el-upload-list) {width: 200px;height: 35px;position: absolute;top: -11px;border: 0.5px solid #ccc;display: flex;align-items: center;overflow: hidden;border-top-left-radius: 5px;border-bottom-left-radius: 5px;.el-upload-list__item {max-width: 100px;margin-top: 2px;}.el-upload-list__item-file-name {height: 28px;}}
}
</style>

父组件使用:

 <FileUpload @fileREquestFn="fileREquestFn" />const fileREquestFn = async(raw: any) => {//...
}

 

http://www.lryc.cn/news/96403.html

相关文章:

  • 随手笔记——根据点对来估计相机的运动综述
  • ip校园广播音柱特点
  • 用 Node.js 手写 WebSocket 协议
  • Xilinx AXI VIP使用教程
  • mysql主主架构搭建,删库恢复
  • pythonweek1
  • 进程虚拟地址空间区域划分
  • OpenAI Code Interpreter 的开源实现:GPT Code UI
  • macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载
  • Electron 主进程和渲染进程传值及窗口间传值
  • C#设计模式之---建造者模式
  • output delay 约束
  • html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示
  • 【C#】并行编程实战:异步流
  • 在家下载论文使用哪些论文下载工具比较好
  • 【LeetCode 算法】Handling Sum Queries After Update 更新数组后处理求和查询-Segment Tree
  • 基于Linux操作系统中的MySQL数据库SQL语句(三十一)
  • 【Matlab】基于BP神经网络的数据回归预测新数据(Excel可直接替换数据)
  • HTTPS连接过程中的中间人攻击
  • redis启动失败,oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  • milvus: 专为向量查询与检索设计的向量数据库
  • 【C# 数据结构】Heap 堆
  • 智慧园区楼宇合集:数字孪生管控系统
  • Ajax 黑马学习
  • 软件应用开发的常见环境
  • Rust中的iter(), into_iter(), iter_mut()
  • [SQL挖掘机] - 日期函数 - current_date
  • JAVA面试总结-Redis篇章(三)——缓存雪崩
  • maven编译报错
  • HPC集群调度系统和计算系统