文件上传处理

 <fks-upload
            :show-download="true"
            class="upload"
            :disabled="form.operate == 'view'"  //是否禁用
            :before-upload="beforeUpload"   // 上传文件之前,一般做格式校验
            :on-success="handleSuccess"    //上传成功,一般是保存token用于像后端请求;fileList赋值给file-list属性回显
            :before-remove="beforeRemove" // 移除文件之前,提示是否移除
            :on-remove="handleRemove"  //移除的时候,fileList赋值给file-list属性用于置空,拿到token调用删除文件的接口
            :on-preview="handlePreview"  //点击文件列表中已上传的文件时的钩子,用于预览
            :on-download="handleDownload"  //用于下载
            multiple   //是否支持多选文件
            :file-list="fileList"  //上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]
            :action="uploadUrl"   //必选参数,上传的地址
            :with-credentials="true"  //支持发送 cookie 凭证信息
            :headers="{ 'Fawkes-Auth': ACESS_TOKEN }"   //携带token,这里是凤翎组件为例
          >
            <div style="display: flex; align-items: center; gap: 15px">
              <fks-button icon="fks-icon-upload2">上传</fks-button>
              <div slot="tip" class="fks-upload__tip">
                支持doc、jpg、png、pdf、rar、zip、ppt等格式;单个文件不大于10M
              </div>
            </div>
          </fks-upload>

1.上传之前的钩子(部分校验)

    //上传文件之前
    beforeUpload(file) {
      const isJPG = file.type === "image/jpeg" || file.type === "image/png";
      // 图片格式
      if (!isJPG) {
        this.$message.error("上传头像图片只能是 JPG/png 格式!");
        return false;
      }
    },
1.1文件类型
文本:
.xls格式:application/vnd.ms-excel
.xlsx格式:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.doc格式:application/msword
.docx格式:application/vnd.openxmlformats-officedocument.wordprocessingml.document
.txt格式:text/plain
.pdf格式:application/pdf
.ppt格式:application/vnd.ms-powerpoint
.zip格式:application/zip
.rar格式:application/x-rar
————————————————
视频:
.mp4格式:video/mp4
.m3u8格式:application/x-mpegURL
.mov格式:video/x-ms-wmv
.avi格式:video/x-msvideo
.flv格式:video/x-flv
.wmv格式:video/x-ms-wmv
————————————————
音频:
.mp3格式:audio/mpeg
————————————————
图片:
.jpeg格式:image/jpeg
.png格式: image/png
.gif格式: image/gif
————————————————

2.上传成功的钩子

    handleSuccess(res, file, fileList) {
      //文件上传完成前不可提交表单
      this.loading = false;
      this.fileTokenList.push(file.response.data.fileToken);
      this.fileList = fileList;
    },

3.移除之前(一般是提示)

    beforeRemove(file) {
      return this.$confirm(`确定移除 ${file.name}?`);
    },

4.移除的时候(将空的fileList赋值,调用文件删除接口)

    handleRemove(file, fileList) {
      this.fileList = fileList;
      deleteFile({
        f8s: [file.fileToken],
      }).then((res) => {
        if (res.status) {
          this.$message.success("移除成功");
        }
      });
    },

5.点击文件列表中已上传的文件时的钩子

    handlePreview(file) {
      this.file = file;    //-----将文件传给用于回显的组件
      this.dialogVisible = true;  //打开那个回显组件
    },

5.1预览那里也可以通过filetoken拼接字符串的方式
在这里插入图片描述

    getSrc(fileToken) {
      let url = process.env.VUE_APP_BASE_API + "/路径";
      return url + `?f8s=${fileToken}`;
    },

6.文件下载(此处包报下载接口以及文件流的处理方法)

    handleDownload(file) {
      downloadFile(file.fileToken).then((res) => {     //调用下载方法,获取文件流
        download(file, res.data);    //将下载到的文件流进行处理
      });
    },





------------------------------------------------------------------------------------------------------------
//根据fileToken下载文件接口
export function downloadFile (f8s) {
  return request({
    url: '路径',
    method: 'GET',
    params: {
      f8s
    },
    headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    },
    timeout: 0,
    responseType: "blob"
  })
}
------------------------------------------------------------------------------------------------------------------------------------
//常用文本(处理下载的文件流)
export const download = (file, blobs) => {
  let blob = new File([blobs], { type: "application/octet-stream" });
  if ("download" in document.createElement("a")) {
    const downloadElement = document.createElement("a");
    let href = "";
    if (window.URL) {
      href = window.URL.createObjectURL(blob);
    } else {
      href = window.webkitURL.createObjectURL(blob);
    }
    downloadElement.href = href;
    downloadElement.download = file.fileName || file.name;
    document.body.appendChild(downloadElement);
    downloadElement.click();
    if (window.URL) {
      window.URL.revokeObjectURL(href);
    } else {
      window.webkitURL.revokeObjectURL(href);
    }
    document.body.removeChild(downloadElement);
    URL.revokeObjectURL(href); //释放 Blob
  } else {
    navigator.msSaveBlob(blob, file.fileName || file.name);
  }
  return;
};

//excel(处理表格方法)
export function exportFile(response) {
  const blob = new Blob([response.data], {
    type: response.headers["content-type"],
  }); // application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型
  const desprsitions = response.headers["content-disposition"].split(";");
  let filename = "";
  for (let i = 0; i < desprsitions.length; i++) {
    if (desprsitions[i].indexOf("filename") > -1) {
      const filenames = desprsitions[i].split("=");
      if (filenames.length > 1) {
        filename = decodeURI(filenames[1].trim());
      }
    }
  }
  if ("download" in document.createElement("a")) {
    const downloadElement = document.createElement("a");
    let href = "";
    if (window.URL) {
      href = window.URL.createObjectURL(blob);
    } else {
      href = window.webkitURL.createObjectURL(blob);
    }
    downloadElement.href = href;
    downloadElement.download = filename;
    document.body.appendChild(downloadElement);
    downloadElement.click();
    if (window.URL) {
      window.URL.revokeObjectURL(href);
    } else {
      window.webkitURL.revokeObjectURL(href);
    }
    document.body.removeChild(downloadElement);
  } else {
    navigator.msSaveBlob(blob, filename);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值