简要描述:
- 把后台路径进行加密,然后重新传递给后台进行文件流方式下载
- 关键字: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:
http://{url参数}/bo/api/v3/file/down?content={base64加密的地址}
- {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