导出、上传

99 阅读1分钟

导出

    // 导出
    const exportFile = async (row: any) => {
      let params = { version: row.version }
      const data = await reqExportSensitiveContent(params)
      if (data.code === 200) {
        const blob = base64ToBlob(data.msg, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        downloadBlob(blob, `敏感词库(${dayjs().format('YYYY-MM-DD HH:mm:ss')}).xlsx`)
      }
    }
    function base64ToBlob(base64Data: string, contentType: string) {
      contentType = contentType || ''
      const sliceSize = 1024
      const byteCharacters = atob(base64Data)
      const byteArrays = []

      for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        const slice = byteCharacters.slice(offset, offset + sliceSize)

        const byteNumbers = new Array(slice.length)
        for (let i = 0; i < slice.length; i++) {
          byteNumbers[i] = slice.charCodeAt(i)
        }

        const byteArray = new Uint8Array(byteNumbers)
        byteArrays.push(byteArray)
      }

      const blob = new Blob(byteArrays, { type: contentType })
      return blob
    }

    function downloadBlob(blob, filename) {
      const url = window.URL.createObjectURL(blob)
      const a = document.createElement('a')
      a.style.display = 'none'
      a.href = url
      a.download = filename
      document.body.appendChild(a)
      a.click()
      window.URL.revokeObjectURL(url)
      document.body.removeChild(a)
    }

上传

原文件上传

    const importFile = async (option: any) => {
      const formData = new FormData()
      formData.append('file', option.file)
      formData.append('text', option.file.name)
      nextTick(async () => {
        const data = await reqImportSensitiveContent(formData)
        if (data.code === 200) {
          ElMessage.success('导入成功')
        }
      })
    }
    const beforeUpload = async (file: any) => {
      const FILE_NAME = file.name
      if (FILE_NAME.substring(FILE_NAME.lastIndexOf('.')) !== '.xls' && FILE_NAME.substring(FILE_NAME.lastIndexOf('.')) !== '.xlsx') {
        ElMessage.warning('仅支持.xls和.xlsx文件')
        return false
      }
    }

转为base64上传

    // 在使用http-request方法的时候,调用的事件必须以param为参数,通过param.file取得文件。
    // 上传图片转化为base64的方法,param.file就是上传的文件。
    UploadImage(param) {
      let typeImg = param.file.name.split(".")[param.file.name.split(".").length - 1];
      let size = param.file.size / 1024;
      if (size > 500) {
        this.$message.error("图片大小不能超过500kb");
        return;
      }
      if (typeImg != "png" && typeImg != "jpg" && typeImg != "bmp") {
        this.$message.error("图片类型必须为png/jpg/bmp");
        return;
      }
      const fileReader = new FileReader();
      fileReader.onload = async () => {
        let srcData = fileReader.result;
        srcData = srcData.split(",")[1];
        let data = await reqUploadImage({
          imgName: param.file.name,
          base64String: srcData,
        });
        if (data.code == 200) {
          this.content.isPicture = 1;
          this.changeNr(data.data, param);
          this.$message.success("上传成功");
        }
      };
      fileReader.readAsDataURL(param.file);
    },