Skip to content

feat(buddy): 在文件管理器和产出页预览音频与视频 - #408

Open
QAyong wants to merge 2 commits into
useLexora:masterfrom
QAyong:codex/preview-audio-video
Open

QAyong wants to merge 2 commits into
useLexora:masterfrom
QAyong:codex/preview-audio-video

Conversation

@QAyong

@QAyong QAyong commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

背景与关联 / Context and related issue

主要改动 / Changes

  • 变更 / Change: 改用原生 video、audio 元素播放,由本地文件按字节范围流式提供。
    • 新增 lexora-media 协议:每个请求都通过 spaceFiles.locate 重新校验空间授权,按字节范围返回 206 或 416。
    • SpaceFileService.read 对音频、视频只返回预览类型而不读取内容,并直接在预览视图中打开;useDesktopWorkbench 中这类文件不再走可编辑副本,直接作为预览打开。
    • lexora-artifact 协议同样按字节范围流式提供音频、视频产出,空间之外的产出在产出页使用同一个播放器。
    • CSP 增加 media-src,允许 lexora-media: 与 lexora-artifact:。
    • 新增 mediaProtocol、mediaFiles、DesktopMediaContent 及空间文件、产出服务的单元测试。

验证 / Verification

  • 自动检查 / Automated checks: 未在本分支本地运行,交由 CI 验证;改动自带上述单元测试。
  • 手动验证 / Manual verification: 无。
  • 未执行 / Not run: 本地 lint、类型检查、测试套件,以及各种音视频格式、大文件拖动进度、授权被撤销后请求被拒的手动验证。

兼容与风险 / Compatibility and risks

  • 本提交最初是在我们另一份文件预览代码上做的,移植到上游当前结构时有 6 处冲突,是手动对着上游接线的,尤其是 useDesktopWorkbench.ts 中打开文件的流程(媒体文件跳过 copies.open 直接走预览)和 DesktopFilePreview.vue、DesktopDocumentContent.vue 的属性传递,请重点审查。
  • 新增了读取本地文件的自定义协议,请重点看 mediaProtocol.ts、serveMediaFile.ts 中的授权校验、范围解析与错误码,以及 CSP 的改动。
  • 不涉及存储与迁移。

界面变更 / UI changes

音频、视频文件在文件管理器和产出页中直接显示播放器,而不是只显示文件名;无法播放时显示“无法播放此文件,可能是当前不支持的编码格式”。

🤖 Generated with Claude Code

probe and others added 2 commits October 21, 2026 00:11
文件在列出或展示之后被移动或删除时,预览与产出页统一显示“加载失败”,用户分不清是文件不见了
还是预览本身出了问题。

现在运行时对这类情况返回 FILE_NOT_FOUND:空间文件服务与产出服务在文件缺失时抛出该错误码,
文件预览和产出页据此显示“文件已被移动或删除”,其他失败仍显示原来的加载失败提示。
补充了中英文文案与对应的单元测试。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
音频和视频文件此前无法预览:图片被整个读成 data URL,超过 1 MiB 的文件只显示文件名。
现在改用原生 video、audio 元素播放,由本地文件按字节范围流式提供。

- 新增 lexora-media 协议:每个请求都通过 spaceFiles.locate 重新校验空间授权,
  按字节范围返回 206 或 416。
- SpaceFileService.read 对音频、视频只返回预览类型而不读取内容,并直接在预览视图中打开。
- lexora-artifact 协议同样按字节范围流式提供音频、视频产出,空间之外的产出在产出页
  使用同一个播放器。
- CSP 增加 media-src,允许上述两个协议。

新增 mediaProtocol、mediaFiles、DesktopMediaContent 及空间文件、产出服务的单元测试。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant