From eafb34d2c298870372e1df3b1ef7cb00d8cec969 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Sat, 3 Nov 2018 23:32:13 +0100 Subject: [PATCH] Fixed static folder thumbnails --- WebContent/page_gallery.jsp | 2 +- src/zall/bean/Folder.java | 9 ++++ src/zall/bean/Image.java | 10 ++-- src/zall/filter/AuthenticationFilter.java | 2 +- src/zall/manager/ResourceManager.java | 2 +- src/zall/page/ContentServlet.java | 59 +++++++++++++++-------- 6 files changed, 57 insertions(+), 27 deletions(-) diff --git a/WebContent/page_gallery.jsp b/WebContent/page_gallery.jsp index e04823c..f1ece40 100755 --- a/WebContent/page_gallery.jsp +++ b/WebContent/page_gallery.jsp @@ -26,7 +26,7 @@ diff --git a/src/zall/bean/Folder.java b/src/zall/bean/Folder.java index 4d0d58e..df3bb3d 100755 --- a/src/zall/bean/Folder.java +++ b/src/zall/bean/Folder.java @@ -7,6 +7,7 @@ import java.util.Collections; import java.util.List; import java.util.logging.Logger; +import zall.page.ContentServlet; import zutil.db.DBConnection; import zutil.db.bean.DBBean; import zutil.db.bean.DBBeanSQLResultHandler; @@ -76,6 +77,10 @@ public class Folder extends DBBean { String tmp = name.replaceAll("\\{NAME\\}", userName); return tmp; } + public String getRealName() { + return name.replaceAll("\\{NAME\\}", + "" + (owner != null ? owner.getId() : -1)); + } public void setName(String name) { this.name = name; } @@ -95,4 +100,8 @@ public class Folder extends DBBean { return Folder.loadSubFolders(db, this).isEmpty() && Media.load(db, this).isEmpty(); } + + public String getUrlSmall() { + return ContentServlet.getFolderThumbnailUrl(this); + } } diff --git a/src/zall/bean/Image.java b/src/zall/bean/Image.java index 1dd1600..e94b153 100644 --- a/src/zall/bean/Image.java +++ b/src/zall/bean/Image.java @@ -106,13 +106,13 @@ public class Image extends Media { BufferedImage image = null; switch (size) { case SMALL: - image = ImageUtil.cropScale(original, 125, 125); + image = ImageUtil.scale(original, 600, 600, true); break; case MEDIUM: - image = ImageUtil.scale(original, 500, 375, true); + image = ImageUtil.scale(original, 1200, 1200, true); break; case LARGE: - image = ImageUtil.scale(original, 1200, 800, true); + image = ImageUtil.scale(original, 2400, 2400, true); break; default: break; @@ -120,9 +120,9 @@ public class Image extends Media { ImageIO.write(image, IMAGE_FORMAT, file); } else if (!orgFile.exists()) - logger.severe("Original image file missing: '" + file.getAbsolutePath() + "'"); + logger.severe("Original image file missing: '" + orgFile.getAbsolutePath() + "'"); else if (orgFile.canRead()) - logger.severe("Can not read original image file: '" + file.getAbsolutePath() + "'"); + logger.severe("Can not read original image file: '" + orgFile.getAbsolutePath() + "'"); } return file; } diff --git a/src/zall/filter/AuthenticationFilter.java b/src/zall/filter/AuthenticationFilter.java index ce356ee..fe125f9 100755 --- a/src/zall/filter/AuthenticationFilter.java +++ b/src/zall/filter/AuthenticationFilter.java @@ -40,7 +40,7 @@ public class AuthenticationFilter implements Filter { HttpServletRequest httpRequest = (HttpServletRequest) request; User user = AuthenticationManager.getUserSession(httpRequest.getSession()); - // continue the request via the filter pipeline if it is login page or it is a isValid User + // continue the request via the filter pipeline if it is login page or it is a valid User if (AuthenticationManager.isValid(user, httpRequest)) { logger.finest("User already authenticated, continuing filter chain."); chain.doFilter(request, response); diff --git a/src/zall/manager/ResourceManager.java b/src/zall/manager/ResourceManager.java index a320dd8..3001623 100644 --- a/src/zall/manager/ResourceManager.java +++ b/src/zall/manager/ResourceManager.java @@ -101,7 +101,7 @@ public class ResourceManager { currentFolder != null; currentFolder = currentFolder.getParent()) { - path.insert(0, currentFolder.getName()); + path.insert(0, currentFolder.getRealName()); if (path.charAt(0) != '/') path.insert(0, '/'); } diff --git a/src/zall/page/ContentServlet.java b/src/zall/page/ContentServlet.java index 9cd660c..f41a0eb 100755 --- a/src/zall/page/ContentServlet.java +++ b/src/zall/page/ContentServlet.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.SQLException; +import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -15,12 +16,17 @@ import org.apache.commons.fileupload.util.Streams; import zall.Zallery; import zall.ZalleryServlet; +import zall.bean.Folder; import zall.bean.Image; import zall.bean.Media; import zall.bean.Video; import zall.manager.ResourceManager; +import zutil.MimeTypeUtil; import zutil.db.DBConnection; +import zutil.io.file.FileUtil; +import zutil.log.LogUtil; +import static zall.page.ContentServlet.URI_FOLDER; import static zall.page.ContentServlet.URI_IMAGE; import static zall.page.ContentServlet.URI_VIDEO; @@ -28,26 +34,32 @@ import static zall.page.ContentServlet.URI_VIDEO; /** * A headless page that provides media content. */ -@WebServlet({URI_IMAGE, URI_VIDEO}) +@WebServlet({URI_IMAGE, URI_VIDEO, URI_FOLDER}) public class ContentServlet extends ZalleryServlet { private static final long serialVersionUID = 1L; + private static Logger logger = LogUtil.getLogger(); - public static final String URI_IMAGE = "/image"; - public static final String URI_VIDEO = "/video"; + public static final String URI_FOLDER = "/folder"; + public static final String URI_IMAGE = "/image"; + public static final String URI_VIDEO = "/video"; public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException { Media media = null; String contentType = ""; + File file = null; + String extension = null; + switch (request.getServletPath()){ - case "/video": - media = Video.load(db, Integer.parseInt(request.getParameter("id"))); - contentType = "video"; + case URI_FOLDER: + file = new File(getServletContext().getRealPath("img/folder.png")); break; - case "/image": + case URI_IMAGE: media = Image.load(db, Integer.parseInt(request.getParameter("id"))); - contentType = "image"; + break; + case URI_VIDEO: + media = Video.load(db, Integer.parseInt(request.getParameter("id"))); break; } @@ -56,23 +68,25 @@ public class ContentServlet extends ZalleryServlet { if (request.getParameter("size") != null) size = Media.Size.valueOf(request.getParameter("size").toUpperCase()); - File file = media.getFile(size); - String extension = media.getFileExtension(size); + file = media.getFile(size); + extension = media.getFileExtension(size); + } + if (file != null && file.exists()) { if (request.getParameter("download") != null) response.setHeader("Content-disposition", "attachment; filename=" + media.getTitle() + "." + extension); - if (file.exists()) { - response.setContentType(contentType + "/" + extension); - response.setContentLength((int) file.length()); + if (extension == null) + extension = FileUtil.getFileExtension(file); - BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); - Streams.copy(in, response.getOutputStream(), false); - in.close(); - } else - response.setStatus(404); + response.setContentType(MimeTypeUtil.getMimeByExtension(extension).toString()); + response.setContentLength((int) file.length()); + + BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); + Streams.copy(in, response.getOutputStream(), false); + in.close(); } else { - // Page not found + logger.warning("File does not exist: " + file); response.setStatus(404); } } @@ -91,4 +105,11 @@ public class ContentServlet extends ZalleryServlet { "?id=" + media.getId() + "&size=" + size.toString().toLowerCase() + (download ? "&download" : ""); } + + /** + * @return a URL for a specific media file where its data can be retrieved. + */ + public static String getFolderThumbnailUrl(Folder folder) { + return Zallery.WEBSITE_URL + "/folder"; + } }