zallery/src/zall/ZalleryContent.java

87 lines
2.7 KiB
Java

package zall;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.util.Streams;
import zall.bean.Image;
import zall.bean.Media;
import zall.bean.User;
import zall.bean.Video;
import zutil.db.DBConnection;
import zutil.io.file.FileUtil;
public class ZalleryContent extends HttpServlet{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{
DBConnection db = null;
try {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
String size = request.getParameter("size");
if( size == null ) size = "";
if( user != null || size.equalsIgnoreCase("small") ){
db = Zallery.getDB();
Media media;
if( "video".equals(request.getParameter("type")) )
media = Video.load(db, Integer.parseInt(request.getParameter("id")));
else
media = Image.load(db, Integer.parseInt(request.getParameter("id")));
if( media != null ){
File file = null;
if( size.equalsIgnoreCase( "small" ) )
file = media.getFile( Media.Size.SMALL );
else if( size.equalsIgnoreCase( "medium" ) )
file = media.getFile( Media.Size.MEDIUM );
else if( size.equalsIgnoreCase( "large" ) )
file = media.getFile( Media.Size.LARGE );
else
file = media.getFile( Media.Size.ORIGINAL );
if( request.getParameter("download") != null )
response.setHeader("Content-disposition", "attachment; filename="+media.getTitle()+"."+FileUtil.getFileExtension(file));
if( file.exists() ){
if( "video".equals(request.getParameter("type")) )
response.setContentType("video/"+FileUtil.getFileExtension(file));
else
response.setContentType("image/"+FileUtil.getFileExtension(file));
response.setContentLength( (int)file.length() );
BufferedInputStream in = new BufferedInputStream( new FileInputStream(file) );
Streams.copy(in, response.getOutputStream(), false);
in.close();
}
else
response.setStatus( 404 );
}
else{
// Page not found
response.setStatus( 404 );
}
}
else{
// Unauthorized
response.setStatus( 401 );
}
} catch (Exception e) {
throw new ServletException(e);
} finally{
if(db != null) db.close();
}
}
}