vue3 文件上传(ElementPlus Upload文件列表点击可下载)


<template>
  <div class="mt-10px">
    <el-upload
      class="upload-demo"
      v-model:file-list="fileLists1"
      multiple
      :show-file-list="true"
      :http-request="jobInformationList"
      :before-upload="beforerUpload"
    >
      <el-button type="">上传附件</el-button>
      <template #file="{ file }">
        <div class="my-10px ml-10px flex justify-between items-center">
          <el-link
            :icon="Document"
            @click="handleDownload(file.id)"
            :underline="false"
            type="info"
            >{{ file.filename }}</el-link
          >
          <div class="cursor-pointer" @click="handleRemove(file, 1)">
            <el-icon><Delete /></el-icon>
          </div>
        </div>
      </template>
    </el-upload>
  </div>
</template>
<script setup lang="ts">
const jobInformationList: any = (param: UploadRequestOptions) => {
  let formData = new FormData()
  formData.append('file', param.file)
  common.uploadFileApi(formData).then((res) => {
    fileLists1.value.push({ name: param.file.name, ...res[0] })
    fileLists1.value = fileLists1.value.filter((item: any) => item.id)
    ElMessage.success('上传成功')
  })
}

const beforerUpload = (file) => {   //校验
  let FileExt = file.name.replace(/.+\./, '')
  if (
    ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'jpg', 'jpeg', 'png'].indexOf(FileExt.toLowerCase()) ===
    -1
  ) {
    ElMessage({
      message: '请上传.pdf、.doc、.docx、.xls、.xlsx、.jpg、.jpeg、.png格式的文件',
      type: 'error'
    })
    return false
  } else if (file.size / 1024 / 1024 > 50) {
    ElMessage.error('文件大小不能超过50MB!')
    return false
  }
}

//下载
const handleDownload = async (id) => {
  common
    .downFile(id)
    .then((res) => {
      let link = document.createElement('a')
      let blogw = new Blob([res.data], { type: 'application/vnd.ms-excel;charset=utf-8' })
      let objectUrl = window.URL.createObjectURL(blogw)
      link.href = objectUrl
      let disposition = decodeURI(res.headers['content-disposition'])
      let fileName = disposition.substring(disposition.indexOf('filename=') + 9, disposition.length)
      link.download = fileName
      link.click()
      window.URL.revokeObjectURL(objectUrl)
    })
    .catch((err) => {
      ElMessage({
        type: 'warning',
        message: '文件下载失败'
      })
    })
}

//移除
const handleRemove = (file, fileLists) => {
  if (fileLists == 1) {
    fileLists1.value = fileLists1.value.filter((item: any) => item.id != file.id)
  }
}
</script>

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!使用 Element Plus 进行文件上传的方法如下: 1. 安装 Element Plus:在项目根目录下运行以下命令: ``` npm install element-plus --save ``` 2. 在 main.js 中引入 Element Plus: ```javascript import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 3. 在组件中使用 el-upload 组件进行文件上传: ```vue <template> <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :data="{foo: 'bar'}" :on-success="handleSuccess" :before-upload="beforeUpload" :file-list="fileList"> <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> <script> export default { data() { return { fileList: [] } }, methods: { handleSuccess(response, file, fileList) { console.log(response, file, fileList); }, beforeUpload(file) { console.log(file); } } } </script> <style> .upload-demo { display: flex; justify-content: center; align-items: center; height: 180px; } </style> ``` 在 el-upload 组件中,我们可以使用 action 属性指定文件上传的地址,data 属性指定上传时需要提交的数据,on-success 属性指定上传成功后的回调函数,before-upload 属性指定文件上传前的回调函数,file-list 属性指定已上传的文件列表。 在回调函数中,我们可以获取到上传成功后的响应数据 response,上传的文件 file,已上传的文件列表 fileList。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值