vue文件上传

vue文件上传

前言

今天写一篇关于文件上传的文章,其实对于真正工作的人来说,这不是很难的事,但对于新手来说无疑是个新技术

实现功能如下图

根据上传文件类型显示对应文件类型,图片直接显示,当然图片特可以做对应类型显示出来
upload

下图红色可以删了,因为当时产品经理觉得不好看,换那种图片的,用蓝色的
图片链接

file

html

该功能是基于iview-ui 的Upload 上传
如果没下载提前安装到项目里
$ npm install view-design --save
具体请点开 快速上手 这个链接

参数说明

img
upload

<Form ref="form"  :label-width="100">
	<FormItem label="营业执照信息:">
        <div class="fileBox">
          <div v-for="(item,index) in fileList" :key="item.fileUrl">
            <Card class="cardBox">
                <div >
                  <div  class="mdclose" @click="deleteFile(index)"><Icon type="md-trash" size="30" style="color: #ed4014;"></Icon></div>
                  <div  class="file_eye" @click="fileLook(item.fileUrl)"><Icon type="md-eye" size="30" style="color: #19be6b;"></Icon></div>
                </div>
                <div style="text-align:center;height:140px;">
                    <img v-if="!['image/png', 'image/jpeg','image/jpg'].includes(item.fileType) " :src="item.iconType" width="80" height="80">
                    <img v-if="item.fileType == 'image/png' || item.fileType =='image/jpeg'|| item.fileType =='image/jpg' " :src="item.fileUrl" width="80" height="81">
                    <h4 class="title">{{item.fileName}}</h4>
                </div>
            </Card>
          </div>
          <div style="cursor: pointer;">
       		 <!-- ***上传路径在这里action*** -->
            <Upload action="/logistics-engine/shippingcompany/uploadFile" :headers="{Authorization: token}" :data="{id: ids?ids:''}"
              :before-upload="beforeUpload" :on-success="uploadSuccessess" :on-error="uploadError" :show-upload-list="false"
              accept=".xls,.xlsx,.jpg,.jpeg,.png,.pdf,.txt,.doc,.docx,.gif,.ppt,.pptx,.zip">
              <div class="uploadStyle">
                  <Icon type="md-add" size="52" style="color: #c5c8ce"></Icon>
              </div>
            </Upload>
          </div>
        </div>
      </FormItem>
 </Form>

js

import { getToken } from '@/libs/util' // token 
data() {
    return {
    	  form: {
	        code: '', // 公司代码
	        token: '', // Token
	        publicAttachments: null, // 营业执照
	      },
		  token: getToken(),// token 看你们上传是不是需不需要了
	      ids: '',
	      fileList: [], // 上传文件信息集合
	      attachmentIconPath: {
	        'default': require('@/assets/uploadFIle/fileUpload-file.png'),
	        pdf: require('@/assets/uploadFIle/fileUpload-pdf.png'),
	        txt: require('@/assets/uploadFIle/fileUpload-txt.png'),
	        zip: require('@/assets/uploadFIle/fileUpload-zip.png'),
	        doc: require('@/assets/uploadFIle/fileUpload-doc.png'),
	        docx: require('@/assets/uploadFIle/fileUpload-docx.png'),
	        ppt: require('@/assets/uploadFIle/fileUpload-ppt.png'),
	        pptx: require('@/assets/uploadFIle/fileUpload-pptx.png'),
	        xls: require('@/assets/uploadFIle/fileUpload-xls.png'),
	        xlsx: require('@/assets/uploadFIle/fileUpload-xlsx.png'),
	        jpg: require('@/assets/uploadFIle/fileUpload-jpg.png'),
	        png: require('@/assets/uploadFIle/fileUpload-png.png'),
	        gif: require('@/assets/uploadFIle/fileUpload-gif.png'),
	        jpeg: require('@/assets/uploadFIle/fileUpload-jpeg.png')
	      }
    }
},
methods: {
	fileLook(val) { // 预览文件 url 图片是预览,文件是下载
      window.open(`${val}`)
    },
    deleteFile(idx) { // 删除文件
    	// 删除接口调用
      shippingCompaniesOpt.deletePublicAttachment(this.fileList[idx].id).then(res => {
        if (res.data.success) {
          this.$Message.info('删除成功')
          this.fileList.splice(idx, 1) // 删除成功之后把当前哪一张删除就OK了
          this.form.publicAttachments = this.fileList
        } else {
          this.$Message.error(('删除失败:') + err.data.errorMsg || err.message || '服务端-500')
        }
      }).catch(err => {
        this.$Message.error('删除失败:' + err.data.message)
      })
    },
	beforeUpload(file) { // 上传之前的逻辑处理
      if (this.fileList.length >= 3) { // 限制最多上传三张
        this.$Message.error('最多支持上传三张')
        return false
      }
      const fileExt = file.name.split('.').pop().toLocaleLowerCase()
      if (['xlsx', 'xls', 'jpg', 'png', 'pdf', 'jpeg', 'txt', 'doc', 'docx', 'gif', 'ppt', 'pptx', 'zip'].includes(fileExt)) {
        console.log('上传文件信息成功')
      } else {
        this.$Notice.warning({
          title: '文件类型错误',
          duration: 6,
          desc:
              '文件:' + file.name +
              '不是想要的文件,请选择后缀为xlsx,xls,jpg,jpeg,png,pdf,txt,doc,docx,gif,ppt,pptx的文件上传。'
        })
        return false
      }
    },
    uploadError(file) { //on-error	文件上传失败时的钩子
      this.$Modal.error({ title: file.message })
    },
    uploadSuccessess(res) { // on-success 文件上传成功时的钩子
      const _this = this
      if (res.result && res.result.msg) {
        return _this.$Message.success('上传文件失败')
      }
      if (res.success && res.result) {
        let name = res.result.fileName.split('.')[1]
        name = name in _this.attachmentIconPath ? name : 'default'
        let list = Object.assign(res.result, { iconType: _this.attachmentIconPath[name] })
        _this.fileList.push(list)
        _this.form.publicAttachments = _this.fileList
        return _this.$Message.success('上传文件成功')
      } else {
        _this.$Modal.error({ title: res.errorMsg })
      }
    }
}

css样式表

注意:这里用的less,如果你没装less环境,你就拆开就可以了,不用嵌套里面
<style lang="less" scoped>
.fileBox{
  margin-bottom: 14px;
  display: flex;
  justify-content: flex-start;
  flex-flow: wrap;
  .cardBox{
    width:170px;margin: 10px;
    cursor: pointer;
    position: relative;
    .title{
      word-wrap:break-word;
    }
    .mdclose{
      // border: 1px solid red;
      display: none;
      text-align: center;
      position: absolute;
      right: 50px;
      top: 50px;
    }
    .file_eye{
      display: none;
      position: absolute;
      left: 50px;
      top: 50px;
    }
    .eye_left{
      left: 70px;
    }
  }
  .cardBox:hover .mdclose, .cardBox:hover .file_eye{
    display: block;
  }
}
.uploadStyle{
  padding: 20px 0;
  width: 174px;
  height: 170px;
  line-height: 120px;
  margin: 12px 10px;
  border: 1px dashed #5cadff;
  border-radius: 8px;
  text-align: center;
  &>.ivu-icon-ios-cloud-upload{
    margin: 0 auto;
  }
}
</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Vue组件来实现上传和查看PDF文件的功能。您可以使用引用中提到的"vue-pdf"组件来实现。这个组件虽然不支持PDF文字复制和打印时可能出现乱码的问题,但已经足够满足您的需求了。 首先,您需要在Vue项目中安装"vue-pdf"组件。您可以通过以下命令使用npm来安装该组件: ``` npm install vue-pdf ``` 安装完成后,您需要在您的Vue组件中引入和使用"vue-pdf"组件。您可以参考中的文档来了解如何使用该组件。 在实现文件上传的功能时,您可以使用Vue提供的文件上传组件,例如"vue-file-upload"组件。您可以在该组件中设置允许上传PDF文件,并在上传成功后,将文件路径保存到Vue的数据中。 当用户想要查看上传的PDF文件时,您可以使用"vue-pdf"组件来显示该文件。您需要将上传的PDF文件路径传递给"vue-pdf"组件的"src"属性,以便加载并显示该PDF文件。 总结起来,您可以按照以下步骤来实现Vue文件上传和查看PDF的功能: 1. 安装"vue-pdf"组件:运行命令`npm install vue-pdf` 2. 引入"vue-pdf"组件:在您的Vue组件中引入"vue-pdf"组件 3. 设置文件上传功能:使用Vue文件上传组件,设置允许上传PDF文件,并将文件路径保存到Vue的数据中 4. 显示PDF文件:使用"vue-pdf"组件,将上传的PDF文件路径传递给"src"属性,以便加载和显示该文件 希望以上信息对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值