vue3使用element ui plus实现文件上传功能,可实现自定义处理上传列表,文件类型限制。

有的时候会对element ui 的上传文件功能模糊,简单做一个思路梳理和组件使用。代码内贴有注释,详细介绍代码使用规则。

思路

添加上传组件,控制传输文件的类型,可自定义绘制文件列表,上传文件时,触发文件上传接口,上传文件到服务器,返还文件的路径,从而触发点击删除文件等功能。前端可以通过文件路径实现前端的下载和浏览功能。

代码实现,内含注释

<el-upload
:disabled="data.length >= 9 ? true : false"  
multiple 
action="/"
:limit="9"
:auto-upload="false" 
:show-file-list="false"
:on-change="uploadFile"
:on-exceed="overLimit"
:on-preview="openImg" 
v-model:file-list="state.uploadList" 
accept=".jpg, .jpeg">
    上传文件
</el-upload>
<!-- 
    注释:
    disabled  是否禁用
    multiple  是否支持多个文件
    limit 文件上传限制
    action 触发行为,一般我们这里是不会使用默认的上传action的。auto-upload为true时,就会触发该行为
    show-file-list 是否展示默认的文件列表,如果需要自定义,我们也可以进行自定义进行处理
    on-change  图片上传时,会进行触发该事件
    on-exceed  超于limit的限制时候,会触发该事件
    on-preview  点击默认的文件列表的时候,会触发该事件,默认返还上传的该文件
    accept  处理文件的接受类型,默认上传框内只支持这些类型,但是如果选择全部文件也可以上传其他文件,我们可以通过其他方法进行限制文件处理的类型。
 -->

 <!-- 自定义上传文件列表 -->
<div v-if="data.length > 0">
    <div>
      <p v-for="(item, index) in state.uploadList">
        <span @click="openImg(item)">
          {{ item.name }}
        </span>
        <img src="·······/图片路径" class="delete_icon" alt="" @click="deleteImg(item)">
      </p>
    </div>
</div>
//通过该文件的url,可以打开该图片
const openImg = (val) => {
    window.open(val.url, '_target')
}

//自定义文件列表时,删除事件的处理,删除指定文件
const deleteImg = (file) => {
  let uploadFiles = state.uploadList
  for (var i = 0; i < uploadFiles.length; i++) {
    if (uploadFiles[i]['url'] == file.url) {
      uploadFiles.splice(i, 1)
    }
  }
}

//超出文件列表进行报错
const overLimit = () => {
  ElMessage.warning(`最多只能上传9个文件`);
}

//上传文件时,进行文件类型判断处理   进行二次的文件格式判断处理
const uploadFile = async (file) => {
  let typeArray = ['jpg', 'jpeg'];
  let isType = typeArray.some((ele) => {
    return file.raw.type.indexOf(ele) > -1
  })
  if (!isType) {
    ElMessage.warning(`上文件格式支持:.jpg,.jpeg`);
    deleteImg(file); //不符合条件就删除处理
    return false;
  }

  //通过调用文件路径接口,获取上传后静态资源的文件路径,返还到前端进行展示。
  let res = await api.uploadGetImgUrl(file); 
  file.url = res.data;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Element UI的el-upload组件实现文件功能,示例代码如下: ``` <template> <el-upload class="upload-demo" action="/upload" :on-success="handleSuccess" :before-upload="beforeUpload" :file-list="fileList" :headers="headers" :data="uploadData" :multiple="true" :limit="5" :accept="'image/*'" :on-exceed="handleExceed" :auto-upload="false" :list-type="'picture-card'" :show-file-list="false" :drag="true" :with-credentials="true" :disabled="false" :on-remove="handleRemove" :on-progress="handleProgress"> <i class="el-icon-plus"></i> <div class="upload-text">将文件拖到此处,或点击上<em>传</em></div> <div slot="tip" class="upload-tip">只能上jpg/png文件,且不超过5个文件</div> </el-upload> </template> <script> import { Upload } from 'element-ui'; export default { components: { 'el-upload': Upload }, data() { return { fileList: [], headers: {}, uploadData: {}, }; }, methods: { handleSuccess(response, file, fileList) { // 上成功回调 console.log(response); console.log(file); console.log(fileList); }, handleExceed(files, fileList) { // 超出文件个数限制触发 this.$message.warning(`当前限制选择 ${this.limit} 个文件,您已选择 ${fileList.length} 个文件`); }, beforeUpload(file) { // 上前回调 console.log(file); }, handleRemove(file, fileList) { // 删除单个文件回调 console.log(file); console.log(fileList); }, handleProgress(event, file, fileList) { // 上进度回调 console.log(event); console.log(file); console.log(fileList); }, }, }; </script> ``` 以上示例代码中,我们使用VueElement UI库,通过el-upload组件和其各种属性和方法完成了文件功能实现。注意,示例代码中的上接口地址和上需要的参数等都需要根据具体情况进行修改。具体使用方法可参考Element UI官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值