/*
|
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 <http://www.gnu.org/licenses/>.
|
*/
|
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";
|
public static final String KL = "_kl";
|
public static final String SM = "_sm";
|
public static final String MT = "_mt";
|
public static final String GR = "_gr";
|
public static final String JPG = ".jpg";
|
public static final String JPEG = ".jpeg";
|
public static final String PNG = ".png";
|
|
/**
|
* Handles the HTTP <code>GET</code> 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 logimgfile = 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(logimgfile.getAbsolutePath());
|
logger.fine(buf.toString());
|
// --- Logausgabe Ende
|
|
if(uriStr.endsWith(JPG) || uriStr.endsWith(JPEG) || uriStr.endsWith(PNG)) {
|
if(uriStr.contains(TN)) {
|
bildAusgeben(request, response, relname, TN, 120);
|
} else if(uriStr.contains(KL)) {
|
bildAusgeben(request, response, relname, KL, 240);
|
} else if(uriStr.contains(SM)) {
|
bildAusgeben(request, response, relname, SM, 500);
|
} else if(uriStr.contains(MT)) {
|
bildAusgeben(request, response, relname, MT, 700);
|
} else if(uriStr.contains(GR)) {
|
bildAusgeben(request, response, relname, GR, 1200);
|
} else {
|
super.doGet(request, response);
|
}
|
} else {
|
super.doGet(request, response);
|
}
|
}
|
|
private void bildAusgeben(HttpServletRequest request, HttpServletResponse response, String relname, String indicator, int gr) throws UnsupportedEncodingException, IOException {
|
File dir = new File(request.getServletContext().getRealPath("/"));
|
relname = relname.replace(indicator, "");
|
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());
|
}
|
}
|