/* WebBox - Dein Server. Copyright (C) 2017 Ulrich Hilger, http://uhilger.de This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package de.uhilger.wbx.web; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.coobird.thumbnailator.Thumbnails; import org.apache.catalina.servlets.DefaultServlet; /** * Mit dem TNServlet kann für eine Bilddatei eine * Miniaturansicht erzeugt werden, wie sie im Dateimanager * der WebBox verwendet wird. * * Unterstuetzt werden die Varianten * 120 (_tn), 240 (_kl), 500 (_dd), 700 (_mt), 1200 (_gr) */ public class TNServlet extends DefaultServlet { private static final Logger logger = Logger.getLogger(TNServlet.class.getName()); /** * Diese String-Konstanten noetigenfalls in eine * Konfigurationsdatei auslagern */ public static final String TN = "_tn"; // 120 public static final String KL = "_kl"; // 240 public static final String SM = "_sm"; // 500 public static final String MT = "_mt"; // 700 public static final String GR = "_gr"; // 1200 public static final String JPG = ".jpg"; public static final String JPEG = ".jpeg"; public static final String PNG = ".png"; /** * Handles the HTTP GET method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uriStr = request.getRequestURI(); String relname = uriStr.substring(request.getContextPath().length()); // --- Logausgabe Start /* File logurifile = new File(uriStr); String loguriStr = uriStr.substring(request.getContextPath().length()); File logdir = new File(request.getServletContext().getRealPath("/")); File imgfile = new File(logdir, loguriStr); StringBuffer buf = new StringBuffer(); buf.append("contextPath: "); buf.append(request.getContextPath()); buf.append("\n"); buf.append("realpath of /: "); buf.append(request.getServletContext().getRealPath("/")); buf.append("\n"); buf.append("urifile: "); buf.append(logurifile.getAbsolutePath()); buf.append("\n"); buf.append("imgfile: "); buf.append(imgfile.getAbsolutePath()); logger.fine(buf.toString()); //System.out.println("TNServlet uri parts " + buf.toString()); */ // --- Logausgabe Ende if(uriStr.endsWith(JPG) || uriStr.endsWith(JPEG) || uriStr.endsWith(PNG)) { File dir = new File(request.getServletContext().getRealPath("/")); String suburiStr = uriStr.substring(request.getContextPath().length()); File imgfile = new File(dir, suburiStr); if(uriStr.contains(TN)) { bildErzeugen(dir, relname, TN, 120, imgfile); } else if(uriStr.contains(KL)) { bildErzeugen(dir, relname, KL, 240, imgfile); } else if(uriStr.contains(SM)) { bildErzeugen(dir, relname, SM, 500, imgfile); } else if(uriStr.contains(MT)) { bildErzeugen(dir, relname, MT, 700, imgfile); } else if(uriStr.contains(GR)) { bildErzeugen(dir, relname, GR, 1200, imgfile); } } super.doGet(request, response); } private void bildErzeugen(File dir, String relname, String indicator, int gr, File tnfile) throws UnsupportedEncodingException, IOException { //File dir = new File(request.getServletContext().getRealPath("/")); // System.out.println("TNServlet dir: " + dir); relname = relname.replace(indicator, ""); // System.out.println("TNServlet bildAusgeben relname: " + relname); // relname: /test/img/IMG_0524.png File imgfile = new File(dir, URLDecoder.decode(relname, "utf-8")); // 120, 240, 500, 700, 1200 /*Thumbnails.of(imgfile) .size(gr, gr) .keepAspectRatio(true) .outputQuality(0.7) .toOutputStream(response.getOutputStream());*/ if(!tnfile.exists()) { Thumbnails.of(imgfile) .size(gr, gr) .keepAspectRatio(true) .outputQuality(0.7) .toFile(tnfile); } } }