Fixed static folder thumbnails
This commit is contained in:
parent
c7747293c5
commit
eafb34d2c2
6 changed files with 57 additions and 27 deletions
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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, '/');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue