简要描述:

  • 把后台路径进行加密,然后重新传递给后台进行文件流方式下载
  • 关键字:downTemplateUrl 和 window.btoa
let data = {
        url: window.btoa(that.excelTemplates.path),
      };
      that.$bsAjax
        .doExport(that.meta.mkey, that.meta.field, that.filter, data)
        .then((res) => {
          if (!res.data || res.data.success !== true) {
            that.$msgBox.error("导出失败");
            that.$store.dispatch("dataLoading", false);
            return;
          } else {
            that.downTemplateUrl(res.data.data.url);
            that.$msgBox.success("导出成功,已下载,请保存。");
            that.$store.dispatch("dataLoading", false);
          }
        });

接口版本:

版本号 制定人 制定日期 修订日期
v3 陈碧贵 2019-01-20 xxxx-xx-xx

请求URL:

  • {mkey} 对应mapper文件
  • {resField} 对应 {mkey}里面 responseField键

请求方式:

  • GET

请求头:

参数名 是否必须 类型 说明
XownerId string 项目唯一ID,对应bo_project {ownerId}
XsysId string 所属系统 对应 bo_system 表
XuserFromFirstShareId string 一级分享用户ID, bo_user user_id
XuserFromSecondShareId string 二级分享用户ID, bo_user user_id
XverifyApi string 加密规则encryptByDES(`${newGuid()}
XfilterAreaCode string 行政区编码, 对应 bo_sys_area area_code
Content-Type: string application/json; charset=utf-8 请求类型

请求参数:

  • 当事件发生时,调用http/https接口,传递参数信息,响应请求结果。
参数名 是否必须 类型 说明
content string 下载的地址,BASE64加密 window.btoa(that.excelTemplates.path) “~/App_Data/Templates/basis/bo-area/template_bo-area_basis.xlsx”
_nodejs string common-data 对应/Config/AppNodeJs/Plugins/fn- common-data.js, 通过nodejs插件,对响应结果进行二次处理 common-data 普通数据(小写驼峰)common-data-under 普通数据下划线

返回示例:

正确时返回:

文件流进行输出


错误时返回:

{
    "code": 0,
    "message": ""
    "error":{
      errorCode:null,
      errorText:null
    }
    "success": false,
}

返回参数说明:

参数名 类型 说明
success bool true 表示数据请求成功(跟code=0一致),调用者优先使用
code int true 表示数据请求成功(跟code=0一致),调用者优先使用
data array 响应的结果数据 name:显示的名称 value:交互的数据库中值 id:通常和value一致,树形结构需要 parentId: 父节点,树形结构需要level:等级,树形结构需要
cacheType string redis/sqlite/local 数据来源缓存 的类型(便于开发调试和性能优化)
cacheDate date 最后数据获取时间

前端下载代码

downTemplateUrl: function () {
      this.$bsAjax.doDown(this.excelTemplates.current.template, null, true);
    },

/**
 * 通过base64路径进行下载
 * @param {
 * http://q.jpg
 * ~/a/a.txt
 * } url 
 */
export function doDownBase64(url, root, location) {
  let urlT = null;
  if (url) {
    let rootD = (root || window.$appConfig.api.upload).replace("upload", "down");
    let content = {
      url
    };
    ///bo/api/v3/file/down
    urlT = `${rootD}?content=${window.btoa(JSON.stringify(content))}`;
  }
  if (location) {
    if (!urlT) {
      MsgBox.error("下载文件未找到。");
    } else {
      window.location.href = urlT;
    }
  }
  return urlT;
}

避免生产环境文件操作权限放太开导致漏洞

   if (urlN.ToLower().StartsWith("http"))
            {
                return await DoFileDown(urlN, PhyPathUtil.ConvertVirToPhyPath(urlN));
            }
            string target = urlN.ToLower().Replace("\\", "/");
            // && !target.Contains("/app_logs") && !target.Contains("/app_caches")  App_Caches、App_Logs、
            if (!target.Contains("/app_temp") && !target.Contains("/filelibary"))
            {
                ThrowError(ErrorCodeConst.UN_KNOWN_99999.ErrorCode, $"{target},只允许App_Temp、filelibary文件被下载");
            }
文档更新时间: 2023-11-11 10:47   作者:admin