• 文件上传下载,客户端名称异常处理


    文件上传

    upload组件中添加自定义方法,beforeUpload进行上传之前的文件处理

    beforeUpload(file){
      let formData = new FormData(); // 实例化一个formdata
      formData.append('files',file); // 将文件对象添加到formdata中
      // 接口请求
      axios.post('fileUpload',formData).then(...);
    }
    

    解决客户端下载文件中存在%28 %29的文件名称bug
    %28 %29这两个字符对应英文字符() 可知是由于客户端对于英文字符的编码,前端处理formData由于它是只读对象

    beforeUpload(file){
      let fileName = file.name;  // 获取文件名称
      let tmpName = fileName.replace(/\(/g,'('). replace(/\)/g,')'); // 对于文件名称中英文字符转化为中文
      let tmpFile = new File([file],tmpName,{type:file.type}); // 替换使用新的文件名称 
      let formData = new FormData(); // 实例化一个formdata
      formData.append('files',tmpFile ); // 将文件对象添加到formdata中 
      // 此时打印formdata已经是处理过文件名称对象
      // 接口请求
      axios.post('fileUpload',formData).then(...);
    }
    

    文件下载(原文件名称下载)

    fileDown(res){
       // res为后端返回的二进制流
       let link = document.createElement('a'); 
       link.href = url; // 返回的url
       link.click();
    }
    

    文件下载(支持重命名下载文件名称)

    fileDown(res,name){
       // res为后端返回的二进制流
       let tmpName = name;
       let fileName = decodeURIComponent(res.headers['content-dispostion'].split('=')[1]); // 对于响应头返回的文件名进行截取 
       let ext = fileName.substring(fileName.lastIndexOf('.')); // 获取文件后缀
       let url = URL.createObjectURL(new Blob([res.data],{
                 type:"application/x-download;charset=UTF-8",
        }));
       let link = document.createElement('a'); 
       link.down = name + ext; // 这里的name可以随意添加
       link.href = url; // 返回的url
       link.click();
    }
    
  • 相关阅读:
    Emacs for OIer 的一些配置
    CF1336E Chiori and Doll Picking 【线性代数,组合计数】
    CF605E Intergalaxy Trips 【贪心,动态规划,期望】
    Luogu6329 【模板】点分树 | 震波
    [SDOI2014]数表
    [BZOJ4403]序列统计
    [BZOJ5099]Pionek
    SP1812 LCS2
    SA & SAM
    [HAOI2016]找相同字符
  • 原文地址:https://www.cnblogs.com/Azune/p/15849802.html
Copyright © 2020-2023  润新知