From d9abfda7eeb11d214012df5733bc7360fb8f3f59 Mon Sep 17 00:00:00 2001 From: ParkGyeongTae Date: Sun, 15 Jun 2025 10:25:34 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[ZEPPELIN-6202]=20Decode=20%20=20=E2=86=92?= =?UTF-8?q?=20space=20in=20VFS=20notebook=20paths?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zeppelin/notebook/repo/VFSNotebookRepo.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java index 70175f5538e..65305ee2c68 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java @@ -22,6 +22,8 @@ import java.io.OutputStream; import java.net.URI; import java.net.URISyntaxException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -114,9 +116,12 @@ private Map listFolder(FileObject fileObject) throws IOExcepti noteInfos.putAll(listFolder(child)); } } else { - // getPath() method returns a string without root directory in windows, so we use getURI() instead - // windows does not support paths with "file:///" prepended. so we replace it by "/" - String noteFileName = fileObject.getName().getURI().replace("file:///", "/"); + // getPath() drops the drive on Windows, so use getURI(). + // Decode URI to change %20 to spaces. + // Windows cannot handle "file:///", replace it with "/". + String noteFileName = URLDecoder.decode( + fileObject.getName().getURI(), StandardCharsets.UTF_8 + ).replace("file:///", "/"); if (noteFileName.endsWith(".zpln")) { try { String noteId = getNoteId(noteFileName); From 5981784acf6614dc26a12ae5f666c40264dc1f6e Mon Sep 17 00:00:00 2001 From: ParkGyeongTae Date: Mon, 21 Jul 2025 22:58:44 +0900 Subject: [PATCH 2/3] [ZEPPELIN-6202] Replace getURI() with getPath() for noteFileName to simplify path handling --- .../apache/zeppelin/notebook/repo/VFSNotebookRepo.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java index 65305ee2c68..bab9a062482 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java @@ -116,12 +116,8 @@ private Map listFolder(FileObject fileObject) throws IOExcepti noteInfos.putAll(listFolder(child)); } } else { - // getPath() drops the drive on Windows, so use getURI(). - // Decode URI to change %20 to spaces. - // Windows cannot handle "file:///", replace it with "/". - String noteFileName = URLDecoder.decode( - fileObject.getName().getURI(), StandardCharsets.UTF_8 - ).replace("file:///", "/"); + String noteFileName = fileObject.getName().getPath(); + if (noteFileName.endsWith(".zpln")) { try { String noteId = getNoteId(noteFileName); From c0c271fff085482c297708a0a10d44cf780675ad Mon Sep 17 00:00:00 2001 From: ParkGyeongTae Date: Sat, 26 Jul 2025 12:26:48 +0900 Subject: [PATCH 3/3] [ZEPPELIN-6202] Fix path decoding issue by replacing getPath() with decoded getURI() --- .../org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java index bab9a062482..32e433fff8f 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/VFSNotebookRepo.java @@ -116,7 +116,12 @@ private Map listFolder(FileObject fileObject) throws IOExcepti noteInfos.putAll(listFolder(child)); } } else { - String noteFileName = fileObject.getName().getPath(); + // getPath() drops the drive on Windows, so use getURI(). + // Decode URI to change %20 to spaces. + // Windows cannot handle "file:///", replace it with "/". + String noteFileName = URLDecoder.decode( + fileObject.getName().getURI(), StandardCharsets.UTF_8 + ).replace("file:///", "/"); if (noteFileName.endsWith(".zpln")) { try {