/* * Copyright 2005-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openuap.cms.resource.action; import java.awt.Dimension; import java.io.File; import java.util.Map; import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.openuap.base.util.ControllerHelper; import org.openuap.base.util.FileUtil; import org.openuap.base.util.StringUtil; import org.openuap.cms.config.CMSConfig; import org.openuap.cms.core.action.AdminAction; import org.openuap.cms.resource.manager.ResourceManager; import org.openuap.cms.resource.model.Resource; import org.openuap.cms.util.file.PathNameStrategy; import org.openuap.cms.util.file.impl.DatePathNameStrategy; import org.openuap.util.ImageUtil; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; /** * <p> * 资源上传控制器. * </p> * * <p> * $Id: UploadAction.java 4026 2011-03-22 14:58:42Z orangeforjava $ * </p> * * @author Joseph * @version 1.0 */ public class UploadAction extends AdminAction { protected String jsinfoViewName; protected PathNameStrategy pathNameStrategy; protected ResourceManager resourceManager; protected String uploadFileViewName; public UploadAction() { initDefaultViewName(); } protected void initDefaultViewName() { jsinfoViewName = "/plugin/cms/base/screens/jsinfo.html"; uploadFileViewName = "/plugin/cms/base/screens/resource/resource_upload.html"; } protected ModelAndView beforeUploadFile(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { return null; } protected ModelAndView afterUploadFile(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { return null; } public ModelAndView doUploadFile(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { // // ModelAndView mv1 = beforeUploadFile(request, response, helper, model); if (mv1 != null) { return mv1; } // ModelAndView mv = new ModelAndView(jsinfoViewName, model); String type = request.getParameter("type"); String category = request.getParameter("category"); String nodeId = request.getParameter("nodeId"); String changeName = request.getParameter("changeName"); String msgView = request.getParameter("msgView"); String customCategory = request.getParameter("customCategory"); if (msgView == null) { msgView = ""; } if (nodeId == null) { nodeId = "0"; } if (customCategory == null) { customCategory = ""; } model.put("msgView", msgView); try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // MultipartFile multipartFile = multipartRequest.getFile("uploadFile"); String contentType = FileUtil.getExtension(multipartFile.getOriginalFilename()); // is valid type if (!isValidFileType(category, contentType)) { String msgType = "error"; String msg = "请选择正确的文件类型-(" + getAcceptFileType(category) + ")"; model.put("msgType", msgType); model.put("msg", msg); return mv; } // dir create,auto mode,every dir not more than 100 files // or simple the // year(4)/month(2)/day(2)/type+year(4)+month(2)+day(2)+hour(2)+minute(2)+second(2)+ms(2) if (pathNameStrategy == null) { pathNameStrategy = new DatePathNameStrategy(); pathNameStrategy.setUserName(this.getUser().getName()); } // String pathName = pathNameStrategy.getPathName(); File dir = makeDir(category + File.separator + pathName); // transfer the file String destFileName = pathNameStrategy.getFileName(category); String fileName = destFileName + "." + FileUtil.getExtension(multipartFile.getOriginalFilename()); File file = new File(dir, fileName); // add to the database Resource rs = new Resource(); rs.setCategory(category); // get the now seconds long now = System.currentTimeMillis(); // // Integer inow = new Integer(String.valueOf(now)); rs.setCreationDate(new Long(now)); rs.setModifiedDate(new Long(now)); Long nid; if (nodeId != null) { nid = new Long(nodeId); } else { nid = new Long(0L); } rs.setNodeId(nid); rs.setCreationUserId(this.getUser().getUserId()); // if (category.equals("img")) { Dimension dm = ImageUtil.getDimension(multipartFile.getInputStream()); // if (dm != null) { String info = dm.width + "*" + dm.height; rs.setInfo(info); } else { rs.setInfo(""); } } else { rs.setInfo(""); } // rs.setName(destFileName + "." + FileUtil.getExtension(multipartFile.getOriginalFilename())); rs.setParentId(new Long(0)); long size = multipartFile.getSize(); size = size / 1024; // b->kb if (size == 0) { size = 1; } Integer kbsize = new Integer(String.valueOf(size)); rs.setSize(kbsize); rs.setSrc(" "); rs.setType(new Integer(type)); rs.setTitle(FileUtil.getFileName(multipartFile.getOriginalFilename())); rs.setPath(category + "/" + pathName + "/" + destFileName + "." + FileUtil.getExtension(multipartFile.getOriginalFilename())); // rs.setDownloadTimes(new Integer(0)); rs.setCustomCategory(customCategory); resourceManager.addResource(rs); // multipartFile.transferTo(file); // String msgType = "success"; String msg = "上传文件成功," + "文件已经成功改名为:" + fileName; model.put("msgType", msgType); model.put("msg", msg); return mv; } catch (Exception e) { e.printStackTrace(); String msgType = "error"; String msg = "上传文件出现意外错误:" + e.getMessage(); model.put("msgType", msgType); model.put("msg", msg); return mv; } } /** * show the editor upload dialog. * * @param request * * @param response * * @param helper * * @param model * * @return */ public ModelAndView doShowUploadDialog(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { ModelAndView mv = new ModelAndView(uploadFileViewName, model); String nodeId = request.getParameter("nodeId"); String category = request.getParameter("category"); model.put("nodeId", nodeId); model.put("category", category); return mv; } protected File makeDir(String path) { String rootDir = CMSConfig.getInstance().getResourceRootPath(); String mypath = rootDir + File.separator + path; mypath = StringUtil.normalizePath(mypath); File dir = new File(mypath); if (!dir.exists() || dir.isFile()) { dir.mkdirs(); } return dir; } /** * * @param type * String * @param contentType * String * @return boolean */ protected boolean isValidFileType(String type, String contentType) { // String acceptTypes = getAcceptFileType(type); if (acceptTypes != null) { StringTokenizer tk = new StringTokenizer(acceptTypes, "|"); while (tk.hasMoreTokens()) { String acType = tk.nextToken(); if (contentType.indexOf(acType) > -1) { return true; } } return false; } return false; } protected String getAcceptFileType(String type) { if (type != null) { if (type.equals("img")) { String acceptTypes = CMSConfig.getInstance().getUploadFileImageType(); return acceptTypes; } else if (type.equals("flash")) { String acceptTypes = CMSConfig.getInstance().getUploadFileFlashType(); return acceptTypes; } else if (type.equals("attach")) { String acceptTypes = CMSConfig.getInstance().getUploadFileAttachType(); return acceptTypes; } else if (type.equals("sattach")) { String acceptTypes = CMSConfig.getInstance().getUploadFileAttachType(); return acceptTypes; }else if(type.equals("media")) { String acceptTypes = CMSConfig.getInstance().getUploadFileMediaType(); return acceptTypes; } } return null; } protected String getFullPath() { return ""; } public void setJsinfoViewName(String jsinfoViewName) { this.jsinfoViewName = jsinfoViewName; } public void setPathNameStrategy(PathNameStrategy pathNameStrategy) { this.pathNameStrategy = pathNameStrategy; } public void setResourceManager(ResourceManager resourceManager) { this.resourceManager = resourceManager; } public void setUploadFileViewName(String uploadFileViewName) { this.uploadFileViewName = uploadFileViewName; } public ResourceManager getResourceManager() { return this.resourceManager; } public String getJsinfoViewName() { return jsinfoViewName; } public PathNameStrategy getPathNameStrategy() { return pathNameStrategy; } public String getUploadFileViewName() { return uploadFileViewName; } }