vue上传图片或文件

实例以element-ui为基础:

html:

<div class="importPDF">
    <el-dialog
      title="PDF数据导入"
      :visible.sync = showDataImportDialog
      center
      width="35%" style="left: 10%">
      <div>
        <label style="font-weight: bold;margin-right: 10px;">文      件:</label>
        <el-input v-model="fileName" size="mini" style="52%; margin-left: 18px"></el-input>
        <el-upload
          class="upload-demo"
          ref="upload"
          action="/pdf/upload"
          :show-file-list="false"
          :before-upload="beforeUpload">
          <el-button slot="trigger" size="mini" type="danger">选取文件</el-button>
        </el-upload>
         <el-form ref="pdfForm"  :model="pdfForm" >
           <el-form-item label="文件类别" style="margin-top: 10px">
             <el-select class="formItem" size="mini" placeholder="请选择文件类别" v-model="pdfForm.announcementType">
               <el-option v-for="item in announcementTypeOptions"
                          :key="item.value"
                          :label="item.key"
                          :value="item.value"></el-option>
             </el-select>
           </el-form-item>
         </el-form>
        <div style="margin-top: 10px">备注:仅限上传一个PDF文件</div>
      </div>
      <div slot="footer" style="text-align: center;">
        <!-- <el-button size="mini" @click="viewfile">预览</el-button> -->
        <el-button size="mini" type="primary" @click="upLoadpdf()">上传</el-button>
        <el-button size="mini" @click="showDataImportDialog = false">取 消</el-button>
      </div>
    </el-dialog>
  </div>

data:

data() {
      return {     
        pdfForm:{
          announcementType:""
        },
        announcementTypeOptions:[
        {
              value: '1',
              key: '已发布'
            }, {
              value: '0',
              key: '未发布'
            }
      ],
        showDataImportDialog:false,
        fileName:"",
      }
    },
methods:
uploadShow(){
        //点击上传显示
        this.showDataImportDialog=true
      },
      //上传PDF文件之前
      beforeUpload(file){
        console.log("文件", file);
        this.file = file;
        this.fileName = file.name;
        // this.fileSize = file.size;
        const extension = file.name.split('.').slice(-1) == 'pdf'
        if (!extension) {
          this.$message.warning('上传模板只能是pdf格式!')
          this.fileName = ''
          return
        }
        let reader = new FileReader();
        reader.readAsDataURL(file);
        let that = this;
        reader.onload = function() {
          that.fileData = reader.result;
        };
        return false; // 返回false不会自动上传
      },
      //预览文件
      viewfile(){
        console.log("viewFile");
        var win = window.open();
        win.document.write(
          '<body style="margin:0px;"><object data="' +
          this.fileData +
          '" type="application/pdf" width="100%" height="100%"><iframe src="' +
          this.fileData +
          '" scrolling="no" width="100%" height="100%" frameborder="0" ></iframe></object></body>'
        );
     
      },
      //上传文件按钮
      upLoadpdf(){
        if(this.fileName === ''){
          this.$message.warning('请选择要上传的文件!');
          return false
        }
        if(this.pdfForm.announcementType === ''){
          this.$message.warning('请选择文件类别');
          return false
        }
            let fileFormData = new FormData();
            fileFormData.append("file", this.file);
            fileFormData.append('announcementType',this.pdfForm.announcementType)
            fileFormData.append('fileLevel',this.pdfForm.fileLevel)
            uploadFile(fileFormData,{headers:{
              "Content-Type": "multipart/form-data"
            }}).then(res=>{  
             console.log(res)

        this.showDataImportDialog=false; this.$message({message: res.data.msg,type: 'success'}); }).catch(err => { failure('出现未知问题,刷新页面,或者联系程序员') console.log(err); }); },

 

原文地址:https://www.cnblogs.com/xiaobaibubai/p/14768905.html