diff --git a/data/auth.sqlite b/data/auth.sqlite index 14be0cc..fbe2b35 100644 Binary files a/data/auth.sqlite and b/data/auth.sqlite differ diff --git a/src/page.html b/src/page.html index cbe0d33..e331098 100644 --- a/src/page.html +++ b/src/page.html @@ -749,7 +749,8 @@ function showDetail(fuuid){ }else h+="
"; h+="

🔍 Probe Data loading...

Loading...
"; h+="

🖼️ Preview "+label+"

"; - var src="/api/v2/files/"+fuuid+"/stream"; + var userId=localStorage.getItem("tree_user")||"demo"; + var src="/api/v2/files/"+userId+"/"+fuuid+"/stream"; var ext=(label||"").split(".").pop().toLowerCase(); var isVideo=(ext=="mp4"||ext=="mov"||ext=="avi"||ext=="webm"||ext=="mkv"); var isTxt=(ext=="txt"||ext=="log"||ext=="csv"||ext=="json"||ext=="xml"); @@ -785,7 +786,7 @@ function showDetail(fuuid){ var nodes=el.querySelectorAll(".mermaid");if(nodes.length)mermaid.run({nodes:Array.from(nodes)}) },100)} }); - fetch("/api/v2/files/"+fuuid+"/probe").then(function(r){return r.json()}).then(function(p){ + fetch("/api/v2/files/"+userId+"/"+fuuid+"/probe").then(function(r){return r.json()}).then(function(p){ var pd=document.getElementById("mb-probe-data"); var ps=document.getElementById("mb-probe-status"); var pr=document.getElementById("mb-preview-res"); @@ -1020,7 +1021,8 @@ function quickPreview(fuuid){ var isDocText=(ext=="docx"||ext=="doc"||ext=="rtf"); var isDocImg=(ext=="pages"||ext=="key"||ext=="numbers"); var isDocPdf=(ext=="pdf"||ext=="pptx"||ext=="xlsx"||ext=="odt"||ext=="xls"||ext=="ppt"||ext=="epub"||ext=="html"); - var src="/api/v2/files/"+fuuid+"/stream"; + var userId=localStorage.getItem("tree_user")||"demo"; + var src="/api/v2/files/"+userId+"/"+fuuid+"/stream"; var o=document.createElement("div"); o.style.cssText="position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);z-index:10002;display:flex;align-items:center;justify-content:center"; diff --git a/src/server.rs b/src/server.rs index 0ce9cc4..aa62281 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1186,7 +1186,9 @@ async fn stream_file( } } -async fn get_file_probe(Path(file_uuid): Path) -> impl IntoResponse { +async fn get_file_probe( + Path((user_id, file_uuid)): Path<(String, String)>, +) -> impl IntoResponse { let result = tokio::task::spawn_blocking(move || -> anyhow::Result { let conn = FileTree::open_user_db("demo")?; let node: Option<(Option, Option)> = conn