feat(files): 文件管理接入 Alist 存储(浏览、增删改、移动复制、上传下载、回收站)
- 文件管理根多出 st:<存储 id>(对照 MP 存储切换),Alist 媒体库目录照常出现在媒体库组 - 列目录一次 list,refresh 只在用户刷新时带;连不上返回 503 不当成空目录 - 新建目录 / 改名(同名不覆盖)/ 删除进 Alist 上的 .umt-trash 并可还原 - 存储内移动复制走 Alist API,本地 ↔ Alist 走整理同一套执行与账本 - 新增 PUT /files/upload(同名不覆盖,Alist 经服务端转传);下载 / 预览流式转发直链 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
1 parent
c2bf8a071a
commit
9d95076a0e
24 files changed
+901
-72
No files matched your search
@@ -74,6 +74,8 @@ export interface FmHarness {
|
||||
api(method: string, path: string, body?: unknown, key?: string): Promise<{ status: number; body: Loose }>;
|
||||
/** 原始响应(非 JSON 接口,如 /files/download) */
|
||||
raw(method: string, path: string, key?: string): Promise<Response>;
|
||||
/** 带原始请求体(如 PUT /files/upload) */
|
||||
rawBody(method: string, path: string, body: BodyInit, key?: string): Promise<Response>;
|
||||
close(): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -264,6 +266,15 @@ export async function createFmHarness(
|
||||
raw(method, path, key = DEV_KEY) {
|
||||
return Promise.resolve(app.request(`/api/v1${path}`, { method, headers: authHeaders(key) }));
|
||||
},
|
||||
rawBody(method, path, body, key = DEV_KEY) {
|
||||
return Promise.resolve(
|
||||
app.request(`/api/v1${path}`, {
|
||||
method,
|
||||
headers: { ...authHeaders(key), "content-type": "application/octet-stream" },
|
||||
body,
|
||||
}),
|
||||
);
|
||||
},
|
||||
async close() {
|
||||
await ts.drop();
|
||||
await rm(base, { recursive: true, force: true });
|
||||
|
||||
Reference in new issue
Block a user