托盘文件下载(TrayServiceController)¶
托盘(Tray)客户端文件下载接口:按 path + name 拼接物理路径下载已存储的附件;若文件已加密则先解密再返回。
- 接口类型:REST 资源(
@Controller(无@RestController)+ 方法级@ResponseBody,方法返回void,由控制器直接写回HttpServletResponse输出流;响应体为文件二进制字节流) - 基址:
${myapps.context-path.runtime:}/api/tray/service - Tag:托盘服务
公共说明¶
- 鉴权(据源码):基址
/api/tray/service不在RestSecurityHandlerInterceptor覆盖范围(拦截器仅覆盖/api/runtime/**与/api/rest/bpm/**)。鉴权由全局过滤器RuntimeSecurityFilter(/*)执行登录态校验,未登录返回401(或 SSO 模式重定向到/signon)。需 accessToken,可通过 Cookie / 请求头 / query 参数任一方式传递。 - 响应结构:非 JSON。直接写回二进制字节流(
Content-Type: application/x-download),按USER-AGENT区分 Firefox / 其他设置Content-Disposition文件名编码。 - 错误处理:
path为空或文件不存在时直接设置 HTTP404返回;- 异常时设置 HTTP
500返回。 - 相关 Servlet:本控制器仅处理
/download.action;/api/tray/service/upload由独立的BreakpointUploadServlet处理(见RuntimeMvcConfig),不在本文档范围。
1. 下载文件¶
按 path 与 name 拼接物理路径(<storageRoot>/<path>/<name>),若该路径已加密则先解密为同目录下的明文临时路径,再以二进制流写回;文件不存在则返回 404。
- 接口类型:REST 资源(文件下载,二进制响应;返回
void) - 请求方式:
@RequestMapping(未限定 method,支持 GET / POST 等所有方法) - 请求路径:
/download.action(完整:{runtime-context}/api/tray/service/download.action) - 鉴权:是(需 accessToken,据源码:
RuntimeSecurityFilter校验登录态) - Tag:托盘服务
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| path | query | string | 否 | 文件保存相对路径(<storageRoot> 之后部分);为空时不响应任何内容 |
| name | query | string | 否 | 文件名 |
请求示例¶
GET /api/tray/service/download.action?path=uploads/demo&name=demo-xxx.png HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:二进制字节流,Content-Type: application/x-download; charset=utf-8。
- 成功:HTTP 200,
Content-Disposition: attachment;filename="<编码文件名>"(Firefox 走MimeUtility.encodeText的 B 编码,其他走URLEncoder.encode),响应体为文件字节流; - 失败(文件不存在):HTTP
404,无响应体; - 失败(异常):HTTP
500,无响应体。