Dateiverwaltung für die WebBox
ulrich
2018-04-03 af99308ac8192fd47be8f6ec030f973a0bf23072
Packen von Ordnern hergestellt
5 files modified
121 ■■■■■ changed files
README.md 5 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/api/FileMgr.java 93 ●●●●● patch | view | raw | blame | history
web/ui/api.js 10 ●●●●● patch | view | raw | blame | history
web/ui/index.html 1 ●●●● patch | view | raw | blame | history
web/ui/ui.js 12 ●●●●● patch | view | raw | blame | history
README.md
@@ -121,11 +121,6 @@
- [Moment](http://momentjs.com/)
- [Numeral](http://numeraljs.com/)
## Geplante Erweiterungen
+ Packen von Ordnern
+ Feeds für Ordner
## Lizenz
Die Dateiverwaltung wird zu den Bedingungen der [GNU Affero General Public License](/gitblit/doc/file-cms.git/master/web!agpl.txt) bereitgestellt. Die von der Dateiverwaltung verwendeten Komponenten unterliegen zum Teil anderen Lizenzen. Deren Nutzungsbedingungen sind an den Quellen der Komponenten angegeben.
src/java/de/uhilger/filecms/api/FileMgr.java
@@ -23,6 +23,7 @@
import de.uhilger.filecms.pub.FileNameComparator;
import de.uhilger.wbx.Bild;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
@@ -38,8 +39,11 @@
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.io.FileUtils;
@@ -447,6 +451,9 @@
      return "Pfad micht erlaubt.";
    }
  }
  /* --------- ZIP entpacken ---------------- */
  public String extractZipfile(String relPath, String filename) {
    String result = null;
    if (!relPath.startsWith(".")) {    
@@ -511,6 +518,92 @@
        }
    }
  /* ------------- Ornder als ZIP packen --------------- */
  public String packFolder(String relPath) {
    if (!relPath.startsWith(".")) {
      try {
        File targetDir = getTargetDir(relPath);
        File parentDir = targetDir.getParentFile();
        StringBuffer fname = new StringBuffer();
        fname.append(targetDir.getName());
        fname.append(".zip");
        File archiveFile = new File(parentDir, fname.toString());
        FileRef folderToPack = new FileRef(targetDir.getAbsolutePath());
        FileRef archive = new FileRef(archiveFile.getAbsolutePath());
        pack(folderToPack, archive);
        return "ok";
      } catch(Exception ex) {
        String result = ex.getLocalizedMessage();
        logger.log(Level.SEVERE, result, ex);
        return result;
      }
    } else {
      return "Falsche relative Pfadangabe";
    }
  }
    /**
     * pack the contents of a given folder into a new ZIP compressed archive
     * @param folder  the folder to pack
     * @param archive  the archive to create from the given files
     * @throws Exception
     */
    private boolean pack(FileRef folder, FileRef archive) throws Exception {
        File file = new File(archive.getAbsolutePath());
        FileOutputStream fos = new FileOutputStream(file);
        CheckedOutputStream checksum = new CheckedOutputStream(fos, new Adler32());
        ZipOutputStream zos = new ZipOutputStream(checksum);
        pack(zos, folder.getAbsolutePath(), "");
        zos.flush();
        zos.finish();
        zos.close();
        fos.flush();
        fos.close();
        return true;
    }
    /**
     * go through the given file structure recursively
     * @param zipFile  the ZIP file to write to
     * @param srcDir  the directory to pack during this cycle
     * @param subDir  the subdirectory to append to names of file entries inside the archive
     * @throws IOException
     */
    private void pack(ZipOutputStream zipFile, String srcDir, String subDir) throws IOException {
        File[] files = new File(srcDir).listFiles();
        for(int i = 0; i < files.length; i++) {
            if(files[i].isDirectory()) {
                pack(zipFile, files[i].getAbsolutePath(), subDir + File.separator + files[i].getName());
            }
            else {
                packFile(zipFile, subDir, files[i]);
            }
        }
    }
    /**
     * pack a given file
     * @param zipFile  the ZIP archive to pack to
     * @param dir  the directory name to append to name of file entry inside archive
     * @param file  the file to pack
     * @throws IOException
     */
    private void packFile(ZipOutputStream zipFile, String dir, File file) throws IOException
    {
        FileInputStream fileinputstream = new FileInputStream(file);
        byte buf[] = new byte[fileinputstream.available()];
        fileinputstream.read(buf);
        String dirWithSlashes = dir.replace('\\', '/');
        //System.out.println("zipping " + dirWithSlashes + "/" + file.getName());
        ZipEntry ze = new ZipEntry(dirWithSlashes + "/" + file.getName());
        ze.setMethod(ZipEntry.DEFLATED);
        zipFile.putNextEntry(ze);
        zipFile.write(buf, 0, buf.length);
        zipFile.closeEntry();
        fileinputstream.close();
    }
  
  /* ---- Hilfsfunktionen ---- */
web/ui/api.js
@@ -149,6 +149,16 @@
  });
}
function fm_pack_folder() {
  //var liste = fm_gewaehlte_dateien();
  var m = '?c=de.uhilger.filecms.api.FileMgr&m=packFolder&p=' + pfad;
  var u = '../svc' + m;
  fm_get(u, "text", function(resp) {
    // console.log('deleteFiles gab folgendes zurueck: ' + resp);
    fm_get_list(pfad);
  });
}
function fm_rename_file(fn, p, neuerName) {
  var m = '?c=de.uhilger.filecms.api.FileMgr&m=renameFile';
  m = m + '&p=' + p; 
web/ui/index.html
@@ -99,6 +99,7 @@
              <a id="saveFileAs" class="dropdown-item" href="#">Speichern unter..</a>
              <div class="dropdown-divider"></div>
              <a id="renameFile" class="dropdown-item" href="#">Umbenennen..</a>
              <a id="m-zip" class="dropdown-item" href="#">Ordner packen</a>
              <a id="m-unzip" class="dropdown-item" href="#">Entpacken</a>
              <a id="m-html-export" class="dropdown-item" href="#">Export HTML</a>
              <div class="dropdown-divider"></div>
web/ui/ui.js
@@ -59,6 +59,7 @@
  $('#saveFileAs').on('click', fm_menu_datei_speichern_unter);
  $('#closeFile').on('click', fm_menu_datei_schliessen);
  $('#renameFile').on('click', fm_menu_datei_umbenennen);
  $('#m-zip').on('click', fm_menu_ordner_packen);
  $('#m-unzip').on('click', fm_menu_datei_entpacken);
  $('#m-html-export').on('click', fm_menu_html_export);
  $('#m-del').on('click', fm_menu_delete);
@@ -623,6 +624,17 @@
  fm_unzip_file(fname);
}
/**
 * Anname: Man ist in dem Ordner, der gepackt werden soll.
 * Dann ist das Archiv anschliessend im Eltern-Ordner.
 */
function fm_menu_ordner_packen() {
  //var gewaehlte = $('.datei-gewaehlt');
  //var fname = $(gewaehlte[0]).text();
  //console.log("Pfad: " + pfad + ", Datei: " + fname);
  fm_pack_folder();
}
/*
 * Hier merkt sich die Dateiverwalting die markierten Dateien fuer 
 * eine Dateioperation. Bei cut wird in der 'paste' Operation auf dem Server