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

el-upload实现上传文件夹

背景:如图一所示,最下面有一个黄色上传文件按钮,为手动上传而且上传区域有上传文件和上传文件夹的区分

所以需要在点击了上传文件夹做特殊处理使得el-upload可以上传文件夹

一、template区域

                        <el-uploadclass="upload-file"dragmultipleref="uploadRef":directory="true"v-show="uploadTypeIndex != 2 && fileArray.length == 0 && !isUpload":file-list="fileArray":auto-upload="false":show-file-list="false":before-upload="handleBeforeUpload":http-request="handleUploadFile":on-change="handleFileChange"accept="application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/pdf, text/plain, text/markdown"><div class="upload-node w-full h-full" @click="handlePreview"><app-svg-icon icon-name="filled-add" class="w-48 h-48 cursor-pointer upload-node-icon" /></div></el-upload>

二、逻辑区域 

01.在拖拽上传的区域绑定一个点击事件handlePreview,(注意不要直接绑定在el-upload区域,会被触发到两次)

const handlePreview = () => {let inputDom: any = nullnextTick(() => {if (document.querySelector('.el-upload__input') != null) {inputDom = document.querySelector('.el-upload__input')if (uploadTypeIndex.value == 1) {inputDom.webkitdirectory = true} else {inputDom.webkitdirectory = false}}})
}
//点击上传文件夹就将document.querySelector('.el-upload__input')获取到的webkitdirectory 设置为true,选择文件时浏览器就会只筛选文件夹
//点击上传文件就将document.querySelector('.el-upload__input')获取到的webkitdirectory 设置为false

02.此时在el-upload的上传文件方法下面就可以请求后端上传文件

 :http-request="handleUploadFile"

// 上传文件
const handleUploadFile = ({ file }) => {console.log(file, '---fie')//有几个文件就触发了几次uploadFileFunc(file)
}function uploadFileFunc(file: any) {const formData = new FormData()formData.append('field1', '111')formData.append('file', file)formData.append('field2', '222') //此次携带参数请求axios({url: 'yourUrl',method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded',},data: formData,}).then(res => {if (res != null && res.status == 200) {//成功后的逻辑}})
}

此时我发现我点击上传单个文件或者选取多个文件上传时是可以成功上传的,在handleUploadFile事件中打印的file长这样:webkitRelativePath:" "

上传文件夹时,打印出来的file长这样:webkitRelativePath: "新建文件夹/111111111111111111.txt"

后端直接返回提示 说找不到该文件,所以怀疑就是因为文件path的原因,所以直接将file的webkitRelativePath改为空字符串即可

但是由于file 对象的属性是只读的,所以无法直接修改 file.webkitRelativePath 的值。如果想在前端上传文件夹时去掉文件的路径信息,可以使用 File 构造函数创建一个新的文件对象,只保留文件本身,而不包含路径信息。

修改后的代码如下

// 上传文件
const handleUploadFile = ({ file }) => {console.log(file, '---fie')let fieClone = new File([file], file.name)//这里就可以文件夹中的每个文件都创建为一个新的 File 对象,并且只保留文件本身//有几个文件就触发了几次uploadFileFunc(fieClone)//传新的File对象
}function uploadFileFunc(file: any) {const formData = new FormData()formData.append('field1', '111')formData.append('file', file)formData.append('field2', '222') //此次携带参数请求axios({url: 'yourUrl',method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded',},data: formData,}).then(res => {if (res != null && res.status == 200) {//成功后的逻辑}})
}

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

相关文章:

  • 京东数据平台(京东数据分析)2023年9月京东冰箱行业品牌销售排行榜!
  • 【Excel】WPS单元格快速转换表格字母大小写
  • 【java】【重构一】分模块开发设计实战
  • Cocos Creator3.8 项目实战(十)使用 protobuf详细教程
  • 第七章:最新版零基础学习 PYTHON 教程—Python 列表(第八节 -在 Python 中获取列表作为用户的输入)
  • Simple RPC - 02 通用高性能序列化和反序列化设计与实现
  • 简单秒表设计仿真verilog跑表,源码/视频
  • 【发布】Photoshop ICO 文件格式插件 3.0
  • 负载均衡、代理和动静分离的战略
  • Gitlab用户角色权限Guest、Reporter、Developer、Master、Owner
  • C#上位机序列9: 批量读写+事件广播+数据类型处理
  • 科技资讯|2023全球智能手表预估出货1.3亿块,智能穿戴提升AI功能
  • 技术架构之术
  • 【自用重要】概率论中θ和θ尖的区别【计算时的一般方法】
  • Redis设计与实现笔记 - 数据结构篇
  • 线性代数-Python-01:向量的基本运算 -手写Vector -学习numpy的基本用法
  • 数字图像处理实验记录二(直方图和直方图均衡化)
  • 大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数
  • TODO Vue typescript forEach的bug,需要再核實
  • 简记一个错误
  • 第四次作业
  • 面试问题整理总结
  • 进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式
  • CentOS | 添加普通用户并授权sudo
  • 【MyBatis】mybatis工具类迭代
  • MSQL系列(六) Mysql实战-SQL语句优化
  • kaggle新赛:UBC卵巢癌亚型分类和异常检测大赛【图像分类】
  • 基于nodejs+vue云旅青城系统
  • 《孙哥说Spring5》笔记汇总
  • 在使用了spring-cloud-starter-gateway后,为什么还会发生cors问题