From 7a6185f9373736ee40e20e2c897abac02c9d31df Mon Sep 17 00:00:00 2001 From: ymq Date: Fri, 18 Sep 2026 08:27:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(workspace):=20=E5=B7=A5=E4=BD=9C=E7=A9=BA?= =?UTF-8?q?=E9=97=B4=E3=80=8C=E6=9F=A5=E7=9C=8B=E3=80=8D=E5=AA=92=E4=BD=93?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9B=B4=E6=8E=A5=E6=92=AD=E6=94=BE(2026-09-?= =?UTF-8?q?18=E7=94=A8=E6=88=B7=E8=A6=81=E6=B1=82)=E2=80=94=E2=80=94worksp?= =?UTF-8?q?ace=5Fview.dspy=E5=8E=9F=E5=8F=AA=E6=B8=B2=E6=9F=93txt/md/json,?= =?UTF-8?q?=E8=A7=86=E9=A2=91/=E9=9F=B3=E9=A2=91/=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=85=A8=E8=90=BD'=E5=85=B6=E4=BB=96=E2=86=92=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E6=9F=A5=E7=9C=8B'=E5=BC=B9=E6=8F=90=E7=A4=BA;?= =?UTF-8?q?=E8=A1=A5=E5=AA=92=E4=BD=93=E5=88=86=E6=94=AF:video=5Fexts?= =?UTF-8?q?=E2=86=92VideoPlayer/audio=5Fexts=E2=86=92AudioPlayer/image=5Fe?= =?UTF-8?q?xts=E2=86=92Image=E6=8E=A7=E4=BB=B6=E7=9B=B4=E6=8E=A5=E6=92=AD?= =?UTF-8?q?=E6=94=BE(=E4=B8=89=E6=8E=A7=E4=BB=B6=E5=9D=87=E5=B7=B2?= =?UTF-8?q?=E6=B3=A8=E5=86=8Cbricks.Factory,=E5=A3=B0=E6=98=8E=E5=BC=8Fwid?= =?UTF-8?q?getBuild=E5=8F=AF=E8=A7=A3=E6=9E=90;workspace=5Ffile.dspy?= =?UTF-8?q?=E7=9A=84FileResponse=E6=94=AF=E6=8C=81Range=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=8F=AF=E6=8B=96=E8=BF=9B=E5=BA=A6);=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E5=90=8D=E8=A6=86=E7=9B=96=E5=AF=B9=E9=BD=90workspace=5Fopen.d?= =?UTF-8?q?spy(=E7=BC=96=E8=BE=91=E5=85=A5=E5=8F=A3=E6=9C=AC=E5=B0=B1?= =?UTF-8?q?=E6=92=AD=E6=94=BE,=E6=9F=A5=E7=9C=8B=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E8=A1=A5=E9=BD=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wwwroot/api/workspace_view.dspy | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/wwwroot/api/workspace_view.dspy b/wwwroot/api/workspace_view.dspy index 468b70b..78adf88 100644 --- a/wwwroot/api/workspace_view.dspy +++ b/wwwroot/api/workspace_view.dspy @@ -102,6 +102,43 @@ if ext in md_exts: }] } +# 媒体文件 → 直接用播放控件打开(2026-09-18 用户要求:查看即播放,不再让下载) +# 控件均已注册进 bricks.Factory(videoplayer.js/audio.js/image.js),声明式 widgetBuild 可解析; +# workspace_file.dspy 已用 FileResponse 提供媒体流(支持 Range 请求,可拖动进度)。 +video_exts = ['.mp4', '.m3u8', '.mpd', '.webm', '.mov', '.avi', '.mkv'] +audio_exts = ['.mp3', '.wav', '.aac', '.flac', '.m4a', '.ogg'] +image_exts = ['.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp', '.bmp', '.ico'] + +if ext in video_exts: + return { + "widgettype": "PopupWindow", + "options": {"title": name + " (播放)", "width": "70%", "height": "70%", "auto_open": True, "resizable": True}, + "subwidgets": [{ + "widgettype": "VideoPlayer", + "options": {"url": file_url, "width": "100%", "height": "100%"} + }] + } + +if ext in audio_exts: + return { + "widgettype": "PopupWindow", + "options": {"title": name + " (播放)", "width": "50%", "height": "30%", "auto_open": True, "resizable": True}, + "subwidgets": [{ + "widgettype": "AudioPlayer", + "options": {"url": file_url, "width": "100%", "height": "100%"} + }] + } + +if ext in image_exts: + return { + "widgettype": "PopupWindow", + "options": {"title": name + " (查看)", "width": "70%", "height": "70%", "auto_open": True, "resizable": True}, + "subwidgets": [{ + "widgettype": "Image", + "options": {"url": file_url, "width": "100%", "height": "100%"} + }] + } + # 其他 → 下载查看 download_url = file_url + "&download=1" download_script = (