el-form与el-upload结合上传带附件的表单数据(前端篇)

作者 : admin 本文共2065个字,预计阅读时间需要6分钟 发布时间: 2024-06-9 共2人阅读

1.写在之前

本文前端采用Vue + element-plus技术栈,前端项目参考yudao-ui-admin-vue3项目与
Geeker-Admin项目。

这篇文章是el-form与el-upload结合上传带附件的表单数据(后端篇)-CSDN博客姐妹篇,后端篇文章主要讲的是后端的实现逻辑,前端篇稍微简单一些,其实最主要的就是封装el-upload组件,供具体的表单组件调用。

2.封装el-upload组件

废话不多说,直接上代码。


  
     1"
      name="file"
      v-model:file-list="_fileList"
      :show-file-list="true"
      :auto-upload="autoUpload"
      :action="updateUrl"
      :headers="uploadHeaders"
      :limit="props.limit"
      :drag="drag"
      :before-upload="beforeUpload"
      :on-exceed="handleExceed"
      :on-success="handleFileSuccess"
      :on-error="excelUploadError"
      :on-remove="handleRemove"
      :on-preview="handlePreview"
      :accept="fileType.join(',')"
      :data="{ bucket: props.bucket }"
      :disabled="disabled"
      class="upload-file-uploader"
    >
      选取文件
    
  



.upload-file-uploader {
  margin-bottom: 5px;
}

:deep(.el-upload-list) {
  width: 400px;
}

:deep(.upload-file-list .el-upload-list__item) {
  position: relative;
  margin-bottom: 10px;
  line-height: 2;
  border: 1px solid #e4e7ed;
}

:deep(.el-upload-list__item-file-name) {
  max-width: 500px;
}

:deep(.upload-file-list .ele-upload-list__item-content) {
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: inherit;
}

:deep(.ele-upload-list__item-content-action .el-link) {
  margin-right: 10px;
}

代码组件个人理解没有什么好讲的。开启自动上传,上传成功拿到后端的数据返回,构造数据,如果有名称相同的文件,全部删除,只使用最新的上传文件数据。上传成功后,更新表单绑定的文件数据。

3.关于文件的下载

这里想要说一下文件的下载,前期看了很多实现,有使用a标签用文件的URL实现下载的,有直接使用window.open(URL)实现的,我在实际下载中,遇到两个问题,第一是遇到浏览器能处理的文件,例如MP4的视频文件,pdf的文本文件,会直接打开,不会下载,第二个问题是下载的名称不能自己指定,按照网上查找的方法指定也不起作用,最后我选择的第二节中代码方法,先获取文件内容,后下载文件。

commonFile: (data: Blob, fileName: string) => {
    download0(data, fileName, 'application/octet-stream')
  }

const download0 = (data: Blob, fileName: string, mineType: string) => {
  // 创建 blob
  const blob = new Blob([data], { type: mineType })
  // 创建 href 超链接,点击进行下载
  window.URL = window.URL || window.webkitURL
  const href = URL.createObjectURL(blob)
  const downA = document.createElement('a')
  downA.href = href
  downA.download = fileName
  downA.click()
  // 销毁超连接
  window.URL.revokeObjectURL(href)
}

4.表单使用

先上一段代码,上传的文件类型为file-type规定的文件类型。


          附件
          
            
              
            
            
              
                这是一些注意消息,比如上传的文件个数,上传的文件类型,上传的文件大小,上传的文件注意事项
              
            
          
        

5.实际效果展示

el-form与el-upload结合上传带附件的表单数据(前端篇)插图

el-form与el-upload结合上传带附件的表单数据(前端篇)插图(1)

el-form与el-upload结合上传带附件的表单数据(前端篇)插图(2)

6.写在最后

其实感觉前端只要有第二节封装组件的代码,代码一看就一目了然,就是在文件下载时候,多花了一点小心思。本篇文章只是简单笼统的介绍了一下前端实现传文件,具体的表单设计其实有很多立方需要讲,后期的话,如果有时间,会录一个实际效果展示视频,敬请期待。如果有不对的地方,还请看到本篇文章的您不吝赐教。

本站无任何商业行为
个人在线分享 » el-form与el-upload结合上传带附件的表单数据(前端篇)
E-->