跳转至

托盘文件下载(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 为空或文件不存在时直接设置 HTTP 404 返回;
  • 异常时设置 HTTP 500 返回。
  • 相关 Servlet:本控制器仅处理 /download.action/api/tray/service/upload 由独立的 BreakpointUploadServlet 处理(见 RuntimeMvcConfig),不在本文档范围。

1. 下载文件

pathname 拼接物理路径(<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,无响应体。