/* =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.cms.applications.common.actions; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.infoglue.cms.util.DesEncryptionHelper; import webwork.action.Action; /** * This class contains methods to handle the trashcan and the item's in it. */ public class ViewFileBrowserAction extends InfoGlueAbstractAction { private final static Logger logger = Logger.getLogger(ViewFileBrowserAction.class.getName()); private static final long serialVersionUID = 1L; private String path = "c:/"; private File file = null; private File[] drives = null; public String doExecute() throws Exception { drives = File.listRoots(); file = new File(path); return Action.SUCCESS; } public String doViewFile() throws Exception { try { if(path != null && !path.equals("")) { if(logger.isDebugEnabled()) logger.debug("path:" + path); DesEncryptionHelper desEncryptionHelper = new DesEncryptionHelper(); String decryptedPath = desEncryptionHelper.decrypt(path); if(logger.isDebugEnabled()) logger.debug("decryptedPath:" + decryptedPath); File file = new File(decryptedPath); if(file.exists() && file.isFile()) { String contentType = ""; if(file.getName().endsWith("pdf")) contentType = "application/pdf"; else if(file.getName().endsWith("ppt") || file.getName().endsWith("pptx")) contentType = "application/vnd.ms-powerpoint"; else if(file.getName().endsWith("xls") || file.getName().endsWith("xlsx")) contentType = "application/vnd.ms-excel"; else if(file.getName().endsWith("doc") || file.getName().endsWith("docx")) contentType = "application/msword"; else if(file.getName().endsWith("png")) contentType = "image/png"; else if(file.getName().endsWith("jpg")) contentType = "image/jpg"; else if(file.getName().endsWith("gif")) contentType = "image/gif"; else if(file.getName().endsWith("tiff")) contentType = "image/tiff"; else if(file.getName().endsWith("psd")) contentType = "image/psd"; if(contentType.equals("")) { logger.warn("Not allowed file type"); throw new Exception("Not allowed file type"); } HttpServletResponse response = getResponse(); response.setContentType(contentType); // print some html ServletOutputStream out = response.getOutputStream(); // print the file InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); int ch; while ((ch = in.read()) !=-1) { out.print((char)ch); } } finally { if (in != null) in.close(); // very important } return NONE; } else logger.error("File not found...:" + path); } } catch (Exception e) { e.printStackTrace(); } return Action.ERROR; } public File[] getDrives() { return drives; } public File getFile() { return file; } public void setPath(String path) { this.path = path; } public String getPath() { return this.path; } public String getPortablePath(File file) { if(file == null) return ""; String path = file.getPath(); path = path.replaceAll("\\\\", "/"); return path; } }