From 17c1d68a63b323f2a7503c400e68c26cf2bc3da2 Mon Sep 17 00:00:00 2001 From: Dunemask Date: Mon, 11 Mar 2024 13:21:56 -0600 Subject: [PATCH] [FEATURE] Allow folder uploads --- lib/k8s/server-files.js | 6 ++++-- src/components/files/MineclusterFiles.jsx | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/k8s/server-files.js b/lib/k8s/server-files.js index efa32d8..36dcd4a 100644 --- a/lib/k8s/server-files.js +++ b/lib/k8s/server-files.js @@ -2,7 +2,8 @@ import ftp from "basic-ftp"; import { ERR } from "../util/logging.js"; import { getServerAssets } from "./k8s-server-control.js"; import ExpressClientError from "../util/ExpressClientError.js"; -import { Readable, Writable, Transform } from "node:stream"; +import { Readable, Transform } from "node:stream"; +import { dirname, basename } from "node:path"; const namespace = process.env.MCL_SERVER_NAMESPACE; @@ -82,7 +83,8 @@ export async function uploadServerItem(serverSpec, file) { const { path } = serverSpec; pathSecurityCheck(path); await useServerFtp(serverSpec, async (c) => { - await c.uploadFrom(fileStream, path); + await c.ensureDir(dirname(path)); + await c.uploadFrom(fileStream, basename(path)); }).catch(handleError); } diff --git a/src/components/files/MineclusterFiles.jsx b/src/components/files/MineclusterFiles.jsx index 656af40..eb48283 100644 --- a/src/components/files/MineclusterFiles.jsx +++ b/src/components/files/MineclusterFiles.jsx @@ -111,10 +111,12 @@ export default function MineclusterFiles(props) { } async function uploadFile(file) { + const filePath = file.path.startsWith("/") ? file.path : `/${file.path}`; const formData = new FormData(); formData.append("file", file); formData.append("id", serverId); - formData.append("path", [...dirStack, file.name].join("/")); + const path = `${[...dirStack].join("/")}${filePath}`; + formData.append("path", path); await fetch("/api/files/upload", { method: "POST", body: formData,