原行为 click → 走 downloadFile 直接落盘,不能在线看。 现 click → openFilePreview(rel) 打开 #file-preview-modal(90vw × 90vh), 按扩展名分派渲染器: - image (jpg/png/gif/webp/bmp/svg/ico) → <img> blob URL - pdf → <iframe> blob URL + application/pdf mime - text 类 (~30 种 txt/log/json/yaml/code) → <pre> textContent (2MB cap) - md → 复用 renderMd(marked + DOMPurify + hljs) - docx → 懒加载 jszip + docx-preview → renderAsync 到 DOM - xlsx/xls → 懒加载 SheetJS → 多 sheet tab + sheet_to_html - 其它 (pptx/doc/ppt/...) → fallback "暂不支持在线预览" + 下载按钮 机制:fetch /v1/files/download 取 blob 绕 auth header 限制(后端不动); 懒加载 vendor 脚本(_scriptCache 防重入,失败 fallback); _trackBlobUrl + _flushBlobUrls 弹框关时统一 revoke 防泄漏; Esc / 点 backdrop / × 三种关闭路径; auth 401 → logout;binary 50MB / text 2MB 上限兜底防 OOM。 pptx 整个社区 JS 库都不成熟(动画/复杂版式失真),先 fallback, 真有需求再上服务端 LibreOffice 转 PDF 统一处理。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| static | ||
| __init__.py | ||
| app.py | ||
| auth.py | ||
| broker.py | ||
| sinks.py | ||