应用静态资源(MagicStaticController)¶
应用工作空间下静态资源访问入口:按应用名称(appName)+ 路径,从工作区目录(<workspace>/<appName>.application/<子目录>/<路径>)读取文件并以二进制流写回。包含 HTML 静态文件(/html/{appName}/**)与应用资源(/resources/{appName}/**)两类。
- 接口类型:REST 资源(
@Component继承AbstractRuntimeController,方法返回void,直接写回HttpServletResponse输出流;响应体为二进制字节流,文件不存在时返回404) - 基址:
${myapps.context-path.runtime:}(仅 runtime context-path,方法级路径分别为/html/{appName}/**与/resources/{appName}/**) - Tag:MagicApi
公共说明¶
- 鉴权(据源码):基址不在
/api/runtime/**,不在RestSecurityHandlerInterceptor覆盖范围。鉴权由全局过滤器RuntimeSecurityFilter(/*)执行登录态校验,未登录返回401(或 SSO 模式重定向到/signon)。所有端点均需 accessToken,可通过 Cookie / 请求头 / query 参数任一方式传递。 - 响应结构:非 JSON。直接写回二进制字节流;文件不存在时设置 HTTP
404并写回纯文本"找不到指定文件"。 - 路径解析:从
request.getRequestURI()中按/html/{appName}或/resources/{appName}前缀截取后续部分作为相对路径;拼接Environment.getInstance().getWorkspaceRootPath() + File.separator + appName + ".application" + (html|resources) + <相对路径>得到物理文件,并通过SecurityFile.resolveFile(...)防目录穿越。
1. 获取应用 HTML 静态文件¶
按 appName 与路径读取 <workspace>/<appName>.application/html/<路径> 文件并以字节流写回。
- 接口类型:REST 资源(文件下载,二进制响应;返回
void) - 请求方式:
@RequestMapping(未限定 method,支持 GET / POST 等所有方法) - 请求路径:
/html/{appName}/**(完整:{runtime-context}/html/{appName}/**) - 鉴权:是(需 accessToken,据源码)
- Tag:MagicApi
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| appName | path | string | 是 | 应用名称(与工作区 <appName>.application 目录对应) |
请求示例¶
响应¶
结构:二进制字节流,Content-Type 由 Servlet 容器按文件扩展名推断。
- 成功:HTTP 200,响应体为文件字节流。
- 失败(文件不存在):HTTP 404,响应体为纯文本
"找不到指定文件"。
2. 获取应用资源文件¶
按 appName 与路径读取 <workspace>/<appName>.application/resources/<路径> 文件并以字节流写回。
- 接口类型:REST 资源(文件下载,二进制响应;返回
void) - 请求方式:
@RequestMapping(未限定 method) - 请求路径:
/resources/{appName}/**(完整:{runtime-context}/resources/{appName}/**) - 鉴权:是(需 accessToken,据源码)
- Tag:MagicApi
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| appName | path | string | 是 | 应用名称 |
请求示例¶
响应¶
结构:二进制字节流,Content-Type 由 Servlet 容器按文件扩展名推断。
- 成功:HTTP 200,响应体为文件字节流。
- 失败(文件不存在):HTTP 404,响应体为纯文本
"找不到指定文件"。