zoukankan      html  css  js  c++  java
  • 【前端开发】js上传文件组件封装

    当前页使用,element ui组件为例

    1、html

     <el-upload
            class="upload-template"
            :class="{ 'no-files': !fileList.length }"
            action="#"
            :accept="accept"
            :file-list="fileList"
            :http-request="uploadSectionFile"
            :before-upload="beforeUpload"
          >
            <div slot="tip" class="el-upload__tip el-mt-2">请上传doc/docx文件</div>
            <el-button slot="trigger" type="primary">上传模板</el-button>
            <el-button class="el-ml-3" @click="clearFile">清空模板</el-button>
            <input id="editTemplate" type="file" style="display:none" />
            <template slot="file" slot-scope="scope">
              <a
                v-if="scope.file.status !== 'uploading'"
                class="el-upload-list__item-name"
                @click="handleFileClick(scope.file)"
              >
                <svg-icon icon-class="icc-files-doc" class="el-mr-2" />{{ scope.file.description }}
              </a>
              <label class="el-upload-list__item-status-label">
                <i
                  :class="{
                    'el-icon-upload-success': true,
                    'el-icon-circle-check': true
                  }"
                />
              </label>
              <i
                slot="trigger"
                class="update-icon list-item-icon el-primary"
                title="更新模板"
                @click="handleEditFile(scope.file)"
              >
                <svg-icon icon-class="ic-upload" />
              </i>
              <el-tooltip class="item-btn" content="删除模板" placement="top">
                <i class="el-icon-delete list-item-icon btn-delete" @click="handleRemoveFile(scope.file)" />
              </el-tooltip>
              <el-progress
                v-if="scope.file.status === 'uploading'"
                type="line"
                :stroke-width="2"
                :percentage="parsePercentage(scope.file.percentage)"
              />
            </template>
          </el-upload>

    2、js

    限制上传文件类型

     private accept: string = '.doc,.docx'

    上传事件触发

      // 上传模板
      async uploadSectionFile(content: any) {
        let type = content.file.type
        content.file.description = content.file.name
        let description = content.file.name
        let params = {
          reportId: this.reportId,
          description: description
        }
        let file = new FormData()
        file.append('file', content.file)try {
          let res = await addReportTemplate(params, file, content)
          this.getReportTemplate()
          this.$message.success('新增模板成功')
        }
      }

    3、上传接口注意

    // 新增报表模板
    export function addReportTemplate(params: { reportId: string; description: string }, file: any, content: any) {
      return request({
        method: 'post',
        url: 'admin/reportTemplate',
        params: params,
        onUploadProgress: progressEvent => {
          let percent = ((progressEvent.loaded / progressEvent.total) * 100) | 0
          // 调用onProgress方法来显示进度条,需要传递个对象 percent为进度值
          content.onProgress({ percent: percent })
        },
        data: file,
        baseURL: buseBaseUrl
      })
    }
  • 相关阅读:
    ORA-06553:PLS-306:wrong number or types of arguments in call to ''
    ORA-06577:output parameter not a bind variable
    CSS3之边框属性border
    Linux_LAMP 最强大的动态网站解决方案
    Linux_LAMP 最强大的动态网站解决方案
    Field BSEG-MWSKZ . does not exist in the screen SAPMF05A 0300 Message no. 00349
    mysql group by
    perl 解析JSON
    数组的数组 散列的散列
    HTTP Cookies
  • 原文地址:https://www.cnblogs.com/xiaohuizhang/p/14421878.html
Copyright © 2011-2022 走看看