diff --git a/app/routers/dashboard.py b/app/routers/dashboard.py index d76c884..c231c5e 100644 --- a/app/routers/dashboard.py +++ b/app/routers/dashboard.py @@ -325,7 +325,9 @@ async def view_page_root(request: Request, page_id: int): ws_id = p.replace("workspace_", "") break filename = fp_parts[-1] if fp_parts else page.get("title", "File") - file_url = f"/api/files/{ws_id}/{filename}" if ws_id else "" + from urllib.parse import quote + safe_name = quote(filename, safe='') + file_url = f"/api/files/{ws_id}/{safe_name}" if ws_id else "" page_data["file_url"] = file_url page_data["file_mime"] = mime_type page_data["file_size"] = file_size diff --git a/app/templates/page_editor.html b/app/templates/page_editor.html index 50582b8..025e65d 100644 --- a/app/templates/page_editor.html +++ b/app/templates/page_editor.html @@ -575,7 +575,7 @@ page_title %}{{ page.title }}{% endblock %} {% block topbar %} if(b.type==='divider')return `

`; if(b.type==='image')return `
${esc(b.alt||'')}
`; if(b.type==='embed'){ - if(b.embed_type==='pdf')return `
`; + if(b.embed_type==='pdf')return `

Failed to load PDF

Open in new tab →
`; if(b.embed_type==='download'){ var sz=b.file_size||0;var szStr=sz<1024?sz+' B':sz<1048576?(sz/1024).toFixed(1)+' KB':(sz/1048576).toFixed(1)+' MB'; return `
{{ fd_icon("paperclip",14) }}
${esc(b.file_name||'File')}
${szStr} · ${esc(b.file_mime||'')}
⬇ Download
`;