Fixed static folder thumbnails

This commit is contained in:
Ziver Koc 2018-11-03 23:32:13 +01:00
parent c7747293c5
commit eafb34d2c2
6 changed files with 57 additions and 27 deletions

View file

@ -26,7 +26,7 @@
<c:forEach items="${subFolders}" var="subFolder"> <c:forEach items="${subFolders}" var="subFolder">
<div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"> <div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4">
<a href="?folder=${subFolder.id}"> <a href="?folder=${subFolder.id}">
<img class="img-responsive" src="" alt="${subFolder.name}" /> <img class="img-responsive" src="${subFolder.getUrlSmall()}" alt="${subFolder.name}" />
</a> </a>
</div> </div>
</c:forEach> </c:forEach>

View file

@ -7,6 +7,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import zall.page.ContentServlet;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.db.bean.DBBean; import zutil.db.bean.DBBean;
import zutil.db.bean.DBBeanSQLResultHandler; import zutil.db.bean.DBBeanSQLResultHandler;
@ -76,6 +77,10 @@ public class Folder extends DBBean {
String tmp = name.replaceAll("\\{NAME\\}", userName); String tmp = name.replaceAll("\\{NAME\\}", userName);
return tmp; return tmp;
} }
public String getRealName() {
return name.replaceAll("\\{NAME\\}",
"" + (owner != null ? owner.getId() : -1));
}
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
@ -95,4 +100,8 @@ public class Folder extends DBBean {
return Folder.loadSubFolders(db, this).isEmpty() && return Folder.loadSubFolders(db, this).isEmpty() &&
Media.load(db, this).isEmpty(); Media.load(db, this).isEmpty();
} }
public String getUrlSmall() {
return ContentServlet.getFolderThumbnailUrl(this);
}
} }

View file

@ -106,13 +106,13 @@ public class Image extends Media {
BufferedImage image = null; BufferedImage image = null;
switch (size) { switch (size) {
case SMALL: case SMALL:
image = ImageUtil.cropScale(original, 125, 125); image = ImageUtil.scale(original, 600, 600, true);
break; break;
case MEDIUM: case MEDIUM:
image = ImageUtil.scale(original, 500, 375, true); image = ImageUtil.scale(original, 1200, 1200, true);
break; break;
case LARGE: case LARGE:
image = ImageUtil.scale(original, 1200, 800, true); image = ImageUtil.scale(original, 2400, 2400, true);
break; break;
default: default:
break; break;
@ -120,9 +120,9 @@ public class Image extends Media {
ImageIO.write(image, IMAGE_FORMAT, file); ImageIO.write(image, IMAGE_FORMAT, file);
} }
else if (!orgFile.exists()) else if (!orgFile.exists())
logger.severe("Original image file missing: '" + file.getAbsolutePath() + "'"); logger.severe("Original image file missing: '" + orgFile.getAbsolutePath() + "'");
else if (orgFile.canRead()) 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; return file;
} }

View file

@ -40,7 +40,7 @@ public class AuthenticationFilter implements Filter {
HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletRequest httpRequest = (HttpServletRequest) request;
User user = AuthenticationManager.getUserSession(httpRequest.getSession()); 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)) { if (AuthenticationManager.isValid(user, httpRequest)) {
logger.finest("User already authenticated, continuing filter chain."); logger.finest("User already authenticated, continuing filter chain.");
chain.doFilter(request, response); chain.doFilter(request, response);

View file

@ -101,7 +101,7 @@ public class ResourceManager {
currentFolder != null; currentFolder != null;
currentFolder = currentFolder.getParent()) { currentFolder = currentFolder.getParent()) {
path.insert(0, currentFolder.getName()); path.insert(0, currentFolder.getRealName());
if (path.charAt(0) != '/') if (path.charAt(0) != '/')
path.insert(0, '/'); path.insert(0, '/');
} }

View file

@ -5,6 +5,7 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.logging.Logger;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet; import javax.servlet.annotation.WebServlet;
@ -15,12 +16,17 @@ import org.apache.commons.fileupload.util.Streams;
import zall.Zallery; import zall.Zallery;
import zall.ZalleryServlet; import zall.ZalleryServlet;
import zall.bean.Folder;
import zall.bean.Image; import zall.bean.Image;
import zall.bean.Media; import zall.bean.Media;
import zall.bean.Video; import zall.bean.Video;
import zall.manager.ResourceManager; import zall.manager.ResourceManager;
import zutil.MimeTypeUtil;
import zutil.db.DBConnection; 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_IMAGE;
import static zall.page.ContentServlet.URI_VIDEO; 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. * A headless page that provides media content.
*/ */
@WebServlet({URI_IMAGE, URI_VIDEO}) @WebServlet({URI_IMAGE, URI_VIDEO, URI_FOLDER})
public class ContentServlet extends ZalleryServlet { public class ContentServlet extends ZalleryServlet {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static Logger logger = LogUtil.getLogger();
public static final String URI_IMAGE = "/image"; public static final String URI_FOLDER = "/folder";
public static final String URI_VIDEO = "/video"; 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 { public void doGet(HttpServletRequest request, HttpServletResponse response, DBConnection db) throws ServletException, SQLException, IOException {
Media media = null; Media media = null;
String contentType = ""; String contentType = "";
File file = null;
String extension = null;
switch (request.getServletPath()){ switch (request.getServletPath()){
case "/video": case URI_FOLDER:
media = Video.load(db, Integer.parseInt(request.getParameter("id"))); file = new File(getServletContext().getRealPath("img/folder.png"));
contentType = "video";
break; break;
case "/image": case URI_IMAGE:
media = Image.load(db, Integer.parseInt(request.getParameter("id"))); 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; break;
} }
@ -56,23 +68,25 @@ public class ContentServlet extends ZalleryServlet {
if (request.getParameter("size") != null) if (request.getParameter("size") != null)
size = Media.Size.valueOf(request.getParameter("size").toUpperCase()); size = Media.Size.valueOf(request.getParameter("size").toUpperCase());
File file = media.getFile(size); file = media.getFile(size);
String extension = media.getFileExtension(size); extension = media.getFileExtension(size);
}
if (file != null && file.exists()) {
if (request.getParameter("download") != null) if (request.getParameter("download") != null)
response.setHeader("Content-disposition", "attachment; filename=" + media.getTitle() + "." + extension); response.setHeader("Content-disposition", "attachment; filename=" + media.getTitle() + "." + extension);
if (file.exists()) { if (extension == null)
response.setContentType(contentType + "/" + extension); extension = FileUtil.getFileExtension(file);
response.setContentLength((int) file.length());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); response.setContentType(MimeTypeUtil.getMimeByExtension(extension).toString());
Streams.copy(in, response.getOutputStream(), false); response.setContentLength((int) file.length());
in.close();
} else BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
response.setStatus(404); Streams.copy(in, response.getOutputStream(), false);
in.close();
} else { } else {
// Page not found logger.warning("File does not exist: " + file);
response.setStatus(404); response.setStatus(404);
} }
} }
@ -91,4 +105,11 @@ public class ContentServlet extends ZalleryServlet {
"?id=" + media.getId() + "&size=" + size.toString().toLowerCase() + "?id=" + media.getId() + "&size=" + size.toString().toLowerCase() +
(download ? "&download" : ""); (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";
}
} }