📄 fckeditoruploadservlet.java
字号:
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2005 Frederico Caldeira Knabben
*
* Licensed under the terms of the GNU Lesser General Public License:
* http://www.opensource.org/licenses/lgpl-license.php
*
* For further information visit:
* http://www.fckeditor.net/
*
* File Name: SimpleUploaderServlet.java
* Java File Uploader class.
*
* Version: 2.3
* Modified: 2005-08-11 16:29:00
*
* File Authors:
* Simone Chiaretta (simo@users.sourceforge.net)
*/
package com.ntsky.bbs.web.fckeditor;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.log4j.Logger;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import com.ntsky.framework.util.FileUtil;
import com.ntsky.framework.util.HttpUtil;
import com.ntsky.bbs.Symbols;
import com.ntsky.bbs.domain.Role;
import com.ntsky.bbs.domain.User;
import com.ntsky.bbs.domain.Attachment;
import com.ntsky.bbs.exception.ServiceException;
import com.ntsky.bbs.util.BeanFactory;
import com.ntsky.bbs.web.servlet.SystemINIT;
import com.ntsky.bbs.service.UserService;
import com.ntsky.bbs.service.AttachmentService;
import com.ntsky.bbs.service.UserFaceService;
import com.ntsky.bbs.util.memory.RoleSingleton;
/**
* Servlet to upload files.<br>
*
* This servlet accepts just file uploads, eventually with a parameter specifying file type
*
* @author Simone Chiaretta (simo@users.sourceforge.net)
*/
public class FCKeditorUploadServlet extends HttpServlet {
private final static Logger logger = Logger.getLogger(FCKeditorUploadServlet.class);
private static String baseDir;
private static boolean debug=false;
private static boolean enabled=false;
private static Hashtable allowedExtensions;
private static Hashtable deniedExtensions;
/**
* Initialize the servlet.<br>
* Retrieve from the servlet configuration the "baseDir" which is the root of the file repository:<br>
* If not specified the value of "/UserFiles/" will be used.<br>
* Also it retrieve all allowed and denied extensions to be handled.
*
*/
public void init() throws ServletException {
debug=(new Boolean(getInitParameter("debug"))).booleanValue();
baseDir=getInitParameter("baseDir");
enabled=(new Boolean(getInitParameter("enabled"))).booleanValue();
if(baseDir==null)
baseDir="/UserFiles/";
String realBaseDir=getServletContext().getRealPath(baseDir);
File baseFile=new File(realBaseDir);
if(!baseFile.exists()){
baseFile.mkdir();
}
allowedExtensions = new Hashtable(3);
deniedExtensions = new Hashtable(3);
allowedExtensions.put("File",FckeditorUtil.stringToArrayList(getInitParameter("AllowedExtensionsFile")));
deniedExtensions.put("File",FckeditorUtil.stringToArrayList(getInitParameter("DeniedExtensionsFile")));
allowedExtensions.put("Image",FckeditorUtil.stringToArrayList(getInitParameter("AllowedExtensionsImage")));
deniedExtensions.put("Image",FckeditorUtil.stringToArrayList(getInitParameter("DeniedExtensionsImage")));
allowedExtensions.put("Flash",FckeditorUtil.stringToArrayList(getInitParameter("AllowedExtensionsFlash")));
deniedExtensions.put("Flash",FckeditorUtil.stringToArrayList(getInitParameter("DeniedExtensionsFlash")));
}
/**
* Manage the Upload requests.<br>
*
* The servlet accepts commands sent in the following format:<br>
* simpleUploader?Type=ResourceType<br><br>
* It store the file (renaming it in case a file with the same name exists) and then return an HTML file
* with a javascript command in it.
*
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (debug) System.out.println("--- BEGIN DOPOST ---");
response.setContentType("text/html; charset=UTF-8");
response.setHeader("Cache-Control","no-cache");
PrintWriter out = response.getWriter();
// edit check user uploader file size
int contextLength = request.getContentLength();
int fileSize = (int)(((float)contextLength)/((float)(1024)));
String retVal="0";
String newName="";
String fileUrl="";
String errorMessage="";
// 检测角色允许上传的文件大小
User user = (User) HttpUtil.getAttribute(request.getSession(),
Symbols.SESSION_USER);
Role role = null;
String userId = "0";
if (user == null) {
// 用户未登录(可能是Guest用户,也可能是由于浏览器原因)
userId = HttpUtil.getCookieValue(request, Symbols.COOKIE_FCKEDITOR);
if(userId==null){
if(logger.isDebugEnabled()){
logger.debug("Guest组用户进行上传操作...");
}
role = RoleSingleton.getInstance().getRole("0");
}
else{
UserService userService = (UserService)BeanFactory.getInstance(getServletContext()).getBean("userService");
user = userService.getUser(userId);
role = RoleSingleton.getInstance().getRole(user.getRoles());
}
} else {
userId = user.getId().toString();
role = RoleSingleton.getInstance().getRole(user.getRoles());
}
if (debug)
System.out.println("get user id from cookie and userId value is : "
+ userId);
if(logger.isDebugEnabled()){
logger.debug("用户允许上传的文件大小 : " + role.getPermissionMap().get("uploadAttachmentSize"));
}
if(fileSize<Integer.parseInt((String)role.getPermissionMap().get("uploadAttachmentSize"))){
String typeStr=request.getParameter("Type");
// edit begin +++++++++++++++++
String currentPath=baseDir + userId + "/" + typeStr;
String currentDirPath=getServletContext().getRealPath(currentPath);
currentPath=request.getContextPath()+currentPath;
// edit end ++++++++++++++++
if (debug) System.out.println(currentDirPath);
if(enabled) {
DiskFileUpload upload = new DiskFileUpload();
try {
List items = upload.parseRequest(request);
Map fields=new HashMap();
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField())
fields.put(item.getFieldName(),item.getString());
else
fields.put(item.getFieldName(),item);
}
FileItem uplFile=(FileItem)fields.get("NewFile");
String fileNameLong=uplFile.getName();
fileNameLong=fileNameLong.replace('\\','/');
String[] pathParts=fileNameLong.split("/");
String fileName=pathParts[pathParts.length-1];
String nameWithoutExt=FckeditorUtil.getNameWithoutExtension(fileName);
String ext=FckeditorUtil.getExtension(fileName);
File pathToSave=new File(currentDirPath,fileName);
fileUrl=currentPath+"/"+fileName;
if(FckeditorUtil.extIsAllowed(allowedExtensions,deniedExtensions,typeStr,ext)) {
int counter=1;
while(pathToSave.exists()){
newName=nameWithoutExt+"("+counter+")"+"."+ext;
fileUrl=currentPath+"/"+newName;
retVal="201";
pathToSave=new File(currentDirPath,newName);
counter++;
}
uplFile.write(pathToSave);
// 记录上传的信息
if(logger.isInfoEnabled()){
logger.info("记录用户上传的文件...");
}
AttachmentService attachmentService = (AttachmentService)BeanFactory.getInstance(getServletContext()).getBean("attachmentService");
try{
Attachment attachment = new Attachment();
attachment.setOriginFilename(fileName);
attachment.setFilename(fileName);
attachment.setFilesize(fileSize);
attachment.setFiletype(typeStr);
attachment.setFolder(currentPath);
attachment.setComments(" ");
attachment.setDateCreated(new Date());
attachment.setUserId(Integer.parseInt(userId));
attachmentService.createAttachment(attachment);
}
catch(ServiceException se){
logger.error("添加附件到库失败...");
retVal="203";
}
}
else {
retVal="202";
errorMessage="";
if (debug) System.out.println("Invalid file type: " + ext);
}
}catch (Exception ex) {
if (debug) ex.printStackTrace();
retVal="203";
}
}
else {
retVal="1";
errorMessage="This file uploader is disabled. Please check the WEB-INF/web.xml file";
}
}
else{
retVal = "204";
}
out.println("<script type=\"text/javascript\">");
out.println("window.parent.OnUploadCompleted("+retVal+",'"+fileUrl+"','"+newName+"','"+errorMessage+"');");
out.println("</script>");
out.flush();
out.close();
if (debug) System.out.println("--- END DOPOST ---");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -