vue3 el-upload 上传附件及预览 限制只能上传一个图片或者pdf格式的文件

这篇具有很好参考价值的文章主要介绍了vue3 el-upload 上传附件及预览 限制只能上传一个图片或者pdf格式的文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3 el-upload 上传附件及预览 限制只能上传一个图片或者pdf格式的文件

效果如图
vue3 el-upload 上传附件及预览 限制只能上传一个图片或者pdf格式的文件
直接看代码吧
template部分

    <div class="file-upload">
      <el-upload
        accept=".pdf,image/jpg,image/jpeg,image/png" // 限制文件类型,加上这个属性,当用户选中文件时只展示此处所类型所包含的文件。比如我这里就只展示上面三种图片格式和Pdf,像word和ppt等就不会展示了
        :action="xxxxxxxxx" // 后端上传文件接口地址
        :before-upload="handleBeforeUpload" // 文件上传前触发
        class="upload-demo"
        :limit="1" // 限制能上传的文件个数
        :on-change="handleChange" // 文件上传状态改变就会触发,添加文件,上传成功,长传失败都会触发
        :on-exceed="handleExceed" // 超出limit限制就会触发
        :on-preview="handlePreview" // 点击上产之后的文件触发
      >
        <el-button type="primary">附件上传</el-button>
        <template #tip>
          <div class="el-upload__tip">
            只能上传一个图片或pdf格式的文件
          </div>
        </template>
      </el-upload>
      <el-button v-if="form.fileUrl" type="primary">
        <a class="file-upload-link" :href="form.fileUrl" target="_blank">预览</a>
      </el-button>
    </div>

css部分

 .file-upload {
    display: flex;
    justify-content: space-between;
    .file-upload-link {
      color: white;
    }
    .file-upload-link:visited {
      color: white;
    }
  }
  .el-upload__tip {
    color: red;
  }

js部分文章来源地址https://www.toymoban.com/news/detail-515200.html


       /**
          * @description 解析proxy数据为普通数据
          * @param value 
       */
       const analysisProxy = (value: any) => {
          return JSON.parse(JSON.stringify(value))
       }

       const state = reactive({
          form: {
            fileUrl: '',
          },
        })

      // 文件上传前触发
      const handleBeforeUpload = (file) => {
        // 拿到文件后缀名
        const fileType = file.name.substring(file.name.lastIndexOf('.') + 1)
        console.log('文件上传类型', fileType)
        // 当然拉我的需求是只需要图片和pdf,大家有需要可以在此处扩展
        const isJpg = fileType === 'jpg'
        const isPng = fileType === 'png'
        const isJpeg = fileType === 'jpeg'
        const isPdf = fileType === 'pdf'
        // const isLt1M = file.size / 1024 / 1024 < 1;
        // 根据后缀名判断文件类型
        if (!isJpg && !isPng && !isJpeg && !isPdf) {
            $baseMessage('只能上传图片和pdf格式的文件!', 'error', 'vab-hey-message-error')
            return false
        }
        // 可以限制图片的大小
        // if (!isLt1M) {
        //     this.$message.error('上传图片大小不能超过 1MB!');
        // }
        return isJpg || isPng || isJpeg || isPdf
      }

	 // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
      const handleChange =(uploadFile,uploadFiles) => {
        console.log('文件上传', analysisProxy(uploadFile),uploadFiles)
        // 文件上传成功之后保存后端返回的路径
        if (analysisProxy(uploadFile).response) {
          state.form.fileUrl = analysisProxy(uploadFile).response.data.imageShowUrl
        }
      }

      // 文件预览 此处其实就是点击上传之后的文件名字触发
      //我这里实现预览也很简答就是把后端返回的路径写在a标签的href属性上
      const handlePreview = (uploadFile) => {
        console.log( analysisProxy(uploadFile))
        state.form.fileUrl = analysisProxy(uploadFile).response.data.imageShowUrl
        console.log('文件地址', state.form.fileUrl)
      }

      // 文件超出上传限制 此方法是和:limit绑定的
      // 我这里是limit=1,也就是限制只能传一个文件,当超出这个                                范围时就会触发这个函数
      const handleExceed = (files, uploadFiles) => {
        console.log('限制上传', files, uploadFiles)
        ElMessageBox.alert('只能上传一个文件,如有需要请删除上一个文件再进行上传', '温馨提示', {
          confirmButtonText: '确定',
        })
      }
      
      return {
        ...toRefs(state),
        handlePreview,
        handleExceed,
        handleBeforeUpload,
        handleChange,
      }

到了这里,关于vue3 el-upload 上传附件及预览 限制只能上传一个图片或者pdf格式的文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包