From 0856674e198c285173844de673445300e62daed9 Mon Sep 17 00:00:00 2001 From: ulrich Date: Thu, 13 Mar 2025 16:35:31 +0000 Subject: [PATCH] Bilddatei rotieren hinzugefuegt --- src/de/uhilger/neon/fm/FileManipulator.java | 110 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 85 insertions(+), 25 deletions(-) diff --git a/src/de/uhilger/neon/fm/FileManipulator.java b/src/de/uhilger/neon/fm/FileManipulator.java index 1026507..93a0694 100644 --- a/src/de/uhilger/neon/fm/FileManipulator.java +++ b/src/de/uhilger/neon/fm/FileManipulator.java @@ -25,24 +25,13 @@ import de.uhilger.fm.Renamer; import de.uhilger.fm.Inflator; import de.uhilger.fm.Deflator; +import de.uhilger.fm.Rotor; +import java.io.File; import java.io.IOException; +import net.coobird.thumbnailator.Thumbnails; /** - * Ein Neon-Actor fuer Aenderungen an Dateien. - * - * Die folgenden Aktionen werden ausgefuehrt. - * - * PUT [url] [body] - * - * <pre> - * - Inhalt einer einzelnen Datei anlegen oder ueberschreiben: url=ziel, Dateiinhalt im Body - * - Liste mit Dateien kopieren (?copyFrom=quelle): url=ziel, Dateiliste im Body - * - Liste mit Dateien verschieben (?moveFrom=quelle): url=Ziel, Dateiliste im Body - * - einzelne Datei duplizieren (?duplicate): url=Zieldatei - * - einzelne Datei umbenennen (?renameTo=neuer Name): url=Datei oder -odner - * - Ordner packen (?zip): url=Ordner - * - Zip-Datei entpacken (?unzip): url=Datei - * </pre> + * Aenderungen an bestehenden Dateien. * * @author Ulrich Hilger * @version 0.1, 07.11.2024 @@ -55,17 +44,76 @@ private static final String P_DUPLICATE = "duplicate"; private static final String P_ZIP = "zip"; private static final String P_UNZIP = "unzip"; + private static final String P_ROTATE = "rotate"; - public void run(HttpExchange exchange) { + /** + * <p> + * Diese Methode ist als Reaktion auf einen HTTP PUT Aufruf an folgende URLs gedacht</p> + * + * <pre> + * PUT [url] + * [body] + * </pre> + * + * <pre> + * - Inhalt einer einzelnen Datei anlegen oder ueberschreiben: url=ziel, Dateiinhalt im Body + * - Liste mit Dateien kopieren (?copyFrom=quelle): url=ziel, Dateiliste im Body + * - Liste mit Dateien verschieben (?moveFrom=quelle): url=Ziel, Dateiliste im Body + * - einzelne Datei duplizieren (?duplicate): url=Zieldatei + * - einzelne Datei umbenennen (?renameTo=neuer Name): url=Datei oder -ordner + * - Ordner packen (?zip): url=Ordner + * - Zip-Datei entpacken (?unzip): url=Datei + * </pre> + * + * + * <pre> + * HTTP PUT /pfad/zur/datei.txt ueberschreibt eine bestehende Datei mit dem im Body + * uebergebenen Inhalt oder legt eine Datei mit diesem Inhalt an + * + * HTTP PUT /pfad/zum/zielordner?copyFrom=/pfad/zum/quellordner + * kopiert die Liste der Datei- oder Ordnernamen im Body + * der Anfrage vom Pfad in 'copyFrom' zum Pfad dieser Anfrage. Jede Datei, die + * im Ziel bereits existiert, bekommt im Ziel einen neuen Namen mit einer + * laufenden Nummer. Bei Ordnern, die im Ziel bereits existieren, bekommt der + * betreffende Ordner im Ziel zunaechst einen neuen Namen mit einer laufenden + * Nummer, dann wird der Quellordner ans Ziel kopiert. + * + * HTTP PUT /pfad/zum/zielordner?moveFrom=/pfad/zum/quellordner + * verschiebt die Liste der Datei- oder Ordnernamen im + * Body der Anfrage vom Pfad in 'moveFrom' zum Pfad dieser Anfrage. Jede Datei, + * die im Ziel bereits existiert, bekommt im Ziel einen neuen Namen mit einer + * laufenden Nummer. Bei Ordnern, die im Ziel bereits existieren, bekommt der + * betreffende Ordner im Ziel zunaechst einen neuen Namen mit einer laufenden + * Nummer, dann wird der Quellordner ans Ziel kopiert. + * + * HTTP PUT /pfad/zur/datei.txt?duplicate legt eine Kopie der Datei an + * + * HTTP PUT /pfad/zur/datei.txt?renameTo=neuer Name benennt die Datei oder den Ordner um, + * sofern der neue Name noch nicht vergeben ist + * + * HTTP PUT /pfad/zum/ordner?zip' packt den Ordner + * + * HTTP PUT /pfad/zur/datei.zip?unzip' entpackt eine Datei + * + * HTTP PUT /pfad/zur/datei.jpg?rotate=180 rotiert eine Bilddatei (- links, sonst rechts) + * + * Eine Dateiliste im Body sieht z.B. wie folgt aus + * ["test.txt","dok","weitere-datei.bin","bild.jpg"] + * + * </pre> + * + * @param exchange das Objekt mit Infos zu HTTP-Request, -Response usw. + */ + public void change(HttpExchange exchange) { try { - super.run(exchange); + init(exchange); String query = exchange.getRequestURI().getQuery(); if (query != null) { String[] params = query.split(FileServer.STR_EQUAL); switch (params[0]) { case P_RENAME: h.inspectFileName(params[1]); - String neuerDateiName = new Renamer().umbenennen(exchange, fileName, params[1], file); + String neuerDateiName = new Renamer().rename(/*fileName, */params[1], file); antwort(exchange, HttpResponder.SC_OK, neuerDateiName); break; case P_COPY: @@ -84,12 +132,17 @@ } break; case P_ZIP: - String path = exchange.getRequestURI().toString(); - zipAntwort(exchange, new Deflator().packFolder(fileName, path, base)); + //String path = exchange.getRequestURI().toString(); + zipAntwort(exchange, new Deflator().packFolder(fileName, /*path, */ base)); break; case P_UNZIP: - path = exchange.getRequestURI().toString(); - zipAntwort(exchange, new Inflator().extractZipfile(fileName, path, base)); + //String path = exchange.getRequestURI().toString(); + zipAntwort(exchange, new Inflator().extractZipfile(fileName, /*path,*/ base)); + break; + case P_ROTATE: + Rotor r = new Rotor(); + r.rotateImgFiles(file, Integer.parseInt(params[1])); + antwort(exchange, HttpResponder.SC_OK, fileName + " rotiert."); break; default: antwort(exchange, HttpResponder.SC_NOT_FOUND, "ungueltige Anfrage"); @@ -102,7 +155,7 @@ speichern(exchange); } } - } catch (IOException | IllegalArgumentException ex) { + } catch (Exception ex) { fehlerAntwort(exchange, ex); } finally { free(); @@ -111,7 +164,12 @@ private void copyOrMove(HttpExchange exchange, String quelle, String ziel, int op) throws IOException { String[] dateiNamen = dateiliste(exchange); - new Mover().copyOrMoveFiles(quelle, ziel, dateiNamen, op, base); + if (op == Mover.OP_COPY) { + new Mover().copy(quelle, ziel, dateiNamen, base); + } else { + new Mover().move(quelle, ziel, dateiNamen, base); + } + //new Mover().copyOrMoveFiles(quelle, ziel, dateiNamen, op, base); antwort(exchange, HttpResponder.SC_OK, "Dateien verarbeitet."); } @@ -122,4 +180,6 @@ antwort(exchange, HttpResponder.SC_UNPROCESSABLE_ENTITY, antw); } } -} \ No newline at end of file + + +} -- Gitblit v1.9.3