📄 cmsnewresourceupload.java
字号:
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/workplace/explorer/CmsNewResourceUpload.java,v $
* Date : $Date: 2006/09/22 15:17:06 $
* Version: $Revision: 1.23 $
*
* This library is part of OpenCms -
* the Open Source Content Mananagement System
*
* Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.workplace.explorer;
import org.opencms.db.CmsDbSqlException;
import org.opencms.db.CmsImportFolder;
import org.opencms.file.CmsFile;
import org.opencms.file.CmsProject;
import org.opencms.file.CmsProperty;
import org.opencms.file.CmsPropertyDefinition;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.file.types.I_CmsResourceType;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.main.OpenCms;
import org.opencms.util.CmsStringUtil;
import org.opencms.workplace.CmsWorkplace;
import org.opencms.workplace.CmsWorkplaceException;
import org.opencms.workplace.CmsWorkplaceSettings;
import org.opencms.workplace.commons.CmsChtype;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import org.apache.commons.fileupload.FileItem;
/**
* The new resource upload dialog handles the upload of single files or zipped files.<p>
*
* The following files use this class:
* <ul>
* <li>/commons/newresource_upload.jsp
* </ul>
* <p>
*
* @author Andreas Zahner
*
* @version $Revision: 1.23 $
*
* @since 6.0.0
*/
public class CmsNewResourceUpload extends CmsNewResource {
/** The value for the resource upload applet action. */
public static final int ACTION_APPLET = 140;
/** The value for the resource name form action. */
public static final int ACTION_NEWFORM2 = 120;
/** The value for the resource upload applet action: error occured. */
public static final int ACTION_SHOWERROR = 150;
/** The value for the resource name form submission action. */
public static final int ACTION_SUBMITFORM2 = 130;
/** The name for the resource form submission action. */
public static final String DIALOG_SHOWERROR = "showerror";
/** The name for the resource form submission action. */
public static final String DIALOG_SUBMITFORM2 = "submitform2";
/** Request parameter name for the new resource file name. */
public static final String PARAM_NEWRESOURCENAME = "newresourcename";
/** Request parameter name for the redirect url. */
public static final String PARAM_REDIRECTURL = "redirecturl";
/** Request parameter name for the redirect target frame name. */
public static final String PARAM_TARGETFRAME = "targetframe";
/** Request parameter name for the upload file unzip flag. */
public static final String PARAM_UNZIPFILE = "unzipfile";
/** Request parameter name for the upload file name. */
public static final String PARAM_UPLOADERROR = "uploaderror";
/** Request parameter name for the upload file name. */
public static final String PARAM_UPLOADFILE = "uploadfile";
/** Request parameter name for the upload folder name. */
public static final String PARAM_UPLOADFOLDER = "uploadfolder";
private String m_paramNewResourceName;
private String m_paramRedirectUrl;
private String m_paramTargetFrame;
private String m_paramUnzipFile;
private String m_paramUploadError;
private String m_paramUploadFile;
private String m_paramUploadFolder;
/**
* Public constructor with JSP action element.<p>
*
* @param jsp an initialized JSP action element
*/
public CmsNewResourceUpload(CmsJspActionElement jsp) {
super(jsp);
}
/**
* Public constructor with JSP variables.<p>
*
* @param context the JSP page context
* @param req the JSP request
* @param res the JSP response
*/
public CmsNewResourceUpload(PageContext context, HttpServletRequest req, HttpServletResponse res) {
this(new CmsJspActionElement(context, req, res));
}
/**
* Used to close the current JSP dialog.<p>
*
* This method overwrites the close dialog method in the super class,
* because in case a new file was uploaded and the cancel button pressed,
* the uploaded file has to be deleted.<p>
*
* It tries to include the URI stored in the workplace settings.
* This URI is determined by the frame name, which has to be set
* in the framename parameter.<p>
*
* @throws JspException if including an element fails
*/
public void actionCloseDialog() throws JspException {
if (getAction() == ACTION_CANCEL) {
try {
CmsResource res = getCms().readResource(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION);
if (res.getState() == CmsResource.STATE_NEW) {
// only delete new resource
getCms().deleteResource(getParamResource(), CmsResource.DELETE_PRESERVE_SIBLINGS);
}
if (res.getState() == CmsResource.STATE_CHANGED) {
// resource is changed, restore content of resource from online project
CmsProject currentProject = getCms().getRequestContext().currentProject();
byte[] onlineContents = null;
try {
// switch to online project and get online file contents
getCms().getRequestContext().setCurrentProject(
getCms().readProject(CmsProject.ONLINE_PROJECT_ID));
CmsFile onlineFile = getCms().readFile(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION);
onlineContents = onlineFile.getContents();
} finally {
// switch back to current project
getCms().getRequestContext().setCurrentProject(currentProject);
}
if (onlineContents != null) {
// write online contents back to offline file
CmsFile modFile = getCms().readFile(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION);
modFile.setContents(onlineContents);
getCms().writeFile(modFile);
}
}
} catch (RuntimeException e) {
// assume file was not present
} catch (Exception e) {
// assume file was not present
}
}
super.actionCloseDialog();
}
/**
* Updates the file type and renames the file if desired.<p>
*
* @throws JspException if inclusion of error dialog fails
*/
public void actionUpdateFile() throws JspException {
try {
CmsResource res = getCms().readResource(getParamResource(), CmsResourceFilter.ALL);
I_CmsResourceType oldType = OpenCms.getResourceManager().getResourceType(res.getTypeId());
if (!oldType.getTypeName().equals(getParamNewResourceType())) {
// change the type of the uploaded resource
int newType = OpenCms.getResourceManager().getResourceType(getParamNewResourceType()).getTypeId();
getCms().chtype(getParamResource(), newType);
}
if ((getParamNewResourceName() != null) && !getParamResource().endsWith(getParamNewResourceName())) {
String newResourceName = CmsResource.getFolderPath(getParamResource()) + getParamNewResourceName();
// rename the resource
getCms().renameResource(getParamResource(), newResourceName);
setParamResource(newResourceName);
}
} catch (Throwable e) {
// error updating file, show error dialog
setParamMessage(Messages.get().getBundle(getLocale()).key(Messages.ERR_UPLOAD_FILE_0));
includeErrorpage(this, e);
}
}
/**
* Uploads the specified file and unzips it, if selected.<p>
*
* @throws JspException if inclusion of error dialog fails
*/
public void actionUpload() throws JspException {
// determine the type of upload
boolean unzipFile = Boolean.valueOf(getParamUnzipFile()).booleanValue();
// Suffix for error messages (e.g. when exceeding the maximum file upload size)
try {
// get the file item from the multipart request
Iterator i = getMultiPartFileItems().iterator();
FileItem fi = null;
while (i.hasNext()) {
fi = (FileItem)i.next();
if (fi.getName() != null) {
// found the file object, leave iteration
break;
} else {
// this is no file object, check next item
continue;
}
}
if (fi != null) {
String fileName = fi.getName();
long size = fi.getSize();
long maxFileSizeBytes = OpenCms.getWorkplaceManager().getFileBytesMaxUploadSize(getCms());
// check file size
if ((maxFileSizeBytes > 0) && (size > maxFileSizeBytes)) {
// file size is larger than maximum allowed file size, throw an error
throw new CmsWorkplaceException(Messages.get().container(
Messages.ERR_UPLOAD_FILE_SIZE_TOO_HIGH_1,
new Long(maxFileSizeBytes / 1024)));
}
byte[] content = fi.get();
fi.delete();
if (unzipFile) {
// zip file upload
String currentFolder = getParamUploadFolder();
if (CmsStringUtil.isEmpty(currentFolder)) {
// no upload folder parameter found, get current folder
currentFolder = getParamCurrentFolder();
}
if (CmsStringUtil.isEmpty(currentFolder) || !currentFolder.startsWith("/")) {
// no folder information found, guess upload folder
currentFolder = computeCurrentFolder();
}
// import the zip contents
new CmsImportFolder(content, currentFolder, getCms(), false);
} else {
// single file upload
String newResname = CmsResource.getName(fileName.replace('\\', '/'));
// determine Title property value to set on new resource
String title = newResname;
if (title.lastIndexOf('.') != -1) {
title = title.substring(0, title.lastIndexOf('.'));
}
List properties = new ArrayList(1);
CmsProperty titleProp = new CmsProperty();
titleProp.setName(CmsPropertyDefinition.PROPERTY_TITLE);
if (OpenCms.getWorkplaceManager().isDefaultPropertiesOnStructure()) {
titleProp.setStructureValue(title);
} else {
titleProp.setResourceValue(title);
}
properties.add(titleProp);
newResname = getCms().getRequestContext().getFileTranslator().translateResource(newResname);
setParamNewResourceName(newResname);
setParamResource(newResname);
setParamResource(computeFullResourceName());
// determine the resource type id from the given information
int resTypeId = OpenCms.getResourceManager().getDefaultTypeForName(newResname).getTypeId();
if (! getCms().existsResource(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION)) {
try {
// create the resource
getCms().createResource(getParamResource(), resTypeId, content, properties);
} catch (CmsDbSqlException sqlExc) {
// SQL error, probably the file is too large for the database settings, delete file
getCms().lockResource(getParamResource());
getCms().deleteResource(getParamResource(), CmsResource.DELETE_PRESERVE_SIBLINGS);
throw sqlExc;
}
} else {
checkLock(getParamResource());
CmsFile file = getCms().readFile(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION);
byte[] contents = file.getContents();
try {
getCms().replaceResource(getParamResource(), resTypeId, content, null);
} catch (CmsDbSqlException sqlExc) {
// SQL error, probably the file is too large for the database settings, restore content
file.setContents(contents);
getCms().writeFile(file);
throw sqlExc;
}
}
}
} else {
throw new CmsWorkplaceException(Messages.get().container(Messages.ERR_UPLOAD_FILE_NOT_FOUND_0));
}
} catch (Throwable e) {
// error uploading file, show error dialog
setParamMessage(Messages.get().getBundle(getLocale()).key(Messages.ERR_UPLOAD_FILE_0));
setAction(ACTION_SHOWERROR);
includeErrorpage(this, e);
}
}
/**
* Builds the list of possible types for the uploaded file.<p>
*
* @return the list of possible files for the uploaded resource
*/
public String buildTypeList() {
return CmsChtype.buildTypeList(this, false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -