diff --git a/build.gradle.kts b/build.gradle.kts index c3da7a6..18ff58e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,7 +42,8 @@ subprojects { testImplementation("org.junit.jupiter:junit-jupiter") implementation("de.srsoftware:configuration.api:1.0.2") implementation("de.srsoftware:tools.jdbc:2.0.0") - implementation("de.srsoftware:tools.http:6.0.4") + implementation("de.srsoftware:tools.http:6.0.5") + implementation("de.srsoftware:tools.mime:1.1.3") implementation("de.srsoftware:tools.logging:1.3.2") implementation("de.srsoftware:tools.optionals:1.0.0") implementation("de.srsoftware:tools.util:2.0.4") diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 235b074..bddcfcf 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -10,7 +10,6 @@ repositories { } dependencies { - implementation("de.srsoftware:tools.mime:1.1.2") implementation("de.srsoftware:tools.util:2.0.4") implementation("org.xerial:sqlite-jdbc:3.49.0.0") testImplementation(platform("org.junit:junit-bom:5.10.0")) diff --git a/documents/build.gradle.kts b/documents/build.gradle.kts index d0f8d16..a170c37 100644 --- a/documents/build.gradle.kts +++ b/documents/build.gradle.kts @@ -9,6 +9,4 @@ dependencies{ implementation("de.srsoftware:document.file:1.0.1") implementation("de.srsoftware:document.processor:1.0.3") implementation("de.srsoftware:document.zugferd:1.0.5") - - implementation("de.srsoftware:tools.mime:1.1.2") } \ No newline at end of file diff --git a/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java b/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java index 01b5414..c2abcba 100644 --- a/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java +++ b/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java @@ -1,6 +1,7 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.files; +import static de.srsoftware.tools.MimeType.MIME_FORM_DATA; import static de.srsoftware.umbrella.core.ConnectionProvider.connect; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.ModuleRegistry.*; @@ -220,6 +221,13 @@ public class FileModule extends BaseHandler implements FileService { if (!path.empty()) filename += "/"+URLDecoder.decode(path.toString(),UTF_8); if (uid != user.id() && !fileDb.isPermitted(user,filename)) throw forbidden("You are not allowed to access {0}",filename); var file = new File(baseDir+filename); + var contentType = contentType(ex).orElse(null); + if (MIME_FORM_DATA.equals(contentType)) { // file upload + // TODO: create parent directory if it does not exist + // TODO: create file and write content + return false; + } + if (file.exists()) throw unprocessable("{0} already exists!",filename); try { file.mkdirs(); diff --git a/frontend/src/routes/files/Index.svelte b/frontend/src/routes/files/Index.svelte index f2c366d..3e3a9c0 100644 --- a/frontend/src/routes/files/Index.svelte +++ b/frontend/src/routes/files/Index.svelte @@ -9,6 +9,7 @@ const router = useTinyRouter(); let children = $state({}); let new_dir = $state(null); + let files = $state(); let parent = $state(false); let form = $state(false); let path = $state(null) @@ -95,6 +96,26 @@ return false; } + async function upload_file(ev){ + ev.preventDefault(); + console.log(files); + const dataArray = new FormData(); + dataArray.append("uploadFile", files); + const url = api('files'+path); + const resp = fetch(url, { + credentials: 'include', + method: 'POST', + headers: [["Content-Type", "multipart/form-data"]], + body: dataArray + }); + if (resp.ok){ + yikes(); + } else { + error(resp); + } + return false; + } + onMount(() => loadChildren(window.location.pathname)); @@ -134,10 +155,10 @@ parent: {parent} {/if} {#if form}