Dateiverwaltung fuer neon
ulrich
2025-03-13 0856674e198c285173844de673445300e62daed9
src/de/uhilger/neon/fm/FileManipulator.java
@@ -25,7 +25,10 @@
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;
/**
 * Aenderungen an bestehenden Dateien.
@@ -41,6 +44,7 @@
  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";
  /**
   * <p>
@@ -56,9 +60,46 @@
   * - 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
   * - 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.
@@ -98,6 +139,11 @@
            //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");
            break;
@@ -109,7 +155,7 @@
          speichern(exchange);
        }
      }
    } catch (IOException | IllegalArgumentException ex) {
    } catch (Exception ex) {
      fehlerAntwort(exchange, ex);
    } finally {
      free();
@@ -134,4 +180,6 @@
      antwort(exchange, HttpResponder.SC_UNPROCESSABLE_ENTITY, antw);
    }
  }
}