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