`
simpledev
  • 浏览: 196189 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

webwork中richtexteditor标签图片上传配置和创建中文多级目录乱码问题解决

阅读更多

1.webwork中的rechtexteditor图片上传时在使用过程中可能会出现如下问题:
 Error on file upload.Error number:203
 Invalid file
 XML request error:Not Found(404)
同时在创建中文多级目录时候,文件目录为乱码,上传含中文名称图片为乱码,
需要对webwork源码进行修改配置来解决上述出现的问题。

2.\webwork-2.2.4-sources\com\opensymphony\webwork\static\richtexteditor\拷贝到工程的\webapp\webwork\richtexteditor\目录下面(如果\webwork\richtexteditor\目录不存在,手动建立),同时在webapp目录下面手动建立\upload\Image\文件夹,用来保存上传的图片
主要对\webwork-2.2.4-sources\~\static\richtexteditor\editor\filemanager\browser\default\下面源文件修改,
目标:上传图片名称里面含中文避免乱码
位置:\webapp\webwork\richtexteditor\editor\filemanager\browser\default\frmupload.html
添加代码:<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
目标:创建目录名称里面含中文避免乱码
位置:\webapp\webwork\richtexteditor\editor\filemanager\browser\default\frmcreatefolder.html
代码:oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + escape( sFolderName) , CreateFolderCallBack ) ;
换成:oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' +  sFolderName , CreateFolderCallBack ) ;

位置:\webapp\webwork\richtexteditor\editor\filemanager\browser\default\browser.html
代码:
oConnector.SendCommand = function( command, params, callBackFunction )
{
 var sUrl = this.ConnectorUrl + 'Command=' + command ;
 sUrl += '&Type=' + this.ResourceType ;
 sUrl += '&CurrentFolder=' + escape( this.CurrentFolder ) ;
 
 if ( params ) sUrl += '&' + params ;

 var oXML = new FCKXml() ;
 
 if ( callBackFunction )
  oXML.LoadUrl( sUrl, callBackFunction ) ; // Asynchronous load.
 else
  return oXML.LoadUrl( sUrl ) ;
}
换成:
oConnector.SendCommand = function( command, params, callBackFunction )
{
 var sUrl = this.ConnectorUrl + 'Command=' + command ;
 sUrl += '&Type=' + this.ResourceType ;
 sUrl += '&CurrentFolder=' +  this.CurrentFolder  ;
 
 if ( params ) sUrl += '&' + params ;

 var oXML = new FCKXml() ;
 
 if ( callBackFunction )
  oXML.LoadUrl( sUrl, callBackFunction ) ; // Asynchronous load.
 else
  return oXML.LoadUrl( sUrl ) ;
}

3.修改webwork.properties文件,使用当前的端口和\webapp\webwork\文件夹

### used to build URLs, such as the UrlTag
webwork.url.http.port = 8081

###false not to read webwork.jar.but to read the webwork folder under ther website
webwork.serve.static=false

 

4.在src目录下面建立4个java文件,如:

org.RichtexteditorConnector,

org.RichtexteditorCreateFolderResultLocal,

org.RichtexteditorGetFoldersAndFilesResultLocal,

org.RichtexteditorGetFoldersResultLocal
代码(org.RichtexteditorConnector):

/**
 * @author hjl
 * @date 2009-4-17
 * @function 
 * @version 
 */
public class RichtexteditorConnector extends DefaultRichtexteditorConnector {

	private static final long serialVersionUID = 1L;

	protected String calculateActualServerPath(String actualServerPath,
			String type, String folderPath) throws Exception {//解决不能创建目录问题
		String path = StringUtils
				.replaceChars("file:///"
						+ servletContext.getRealPath("/" + actualServerPath),
						'\\', '/');
		makeDirIfNotExists(path);
		path = path.endsWith("/") ? path : path + "/";
		return path + type + folderPath;
	}

	/**
	 * 创建中文目录时转码
	 */
	@Override
	protected CreateFolderResult createFolder(String virtualFolderPath, String type, String newFolderName) {
		try {
			String tmpPath = calculateActualServerPath(getActualServerPath(), type, virtualFolderPath);
			tmpPath = tmpPath+newFolderName;
			//dir 中文
			tmpPath = new String(tmpPath.getBytes("ISO-8859-1"),"gbk");
//			System.out.println("tmpPath:"+tmpPath);
			boolean alreadyExists = makeDirIfNotExists(tmpPath);
			if (alreadyExists) {
				return CreateFolderResult.folderAlreadyExists();
			}
		} catch(Exception e) {
			return CreateFolderResult.unknownError();
		}
		return CreateFolderResult.noErrors();
	}

	/**
	 * 中文文件夹显示转码
	 */
	@Override
	protected FoldersAndFiles getFoldersAndFiles(String virtualFolderPath, String type) throws Exception {
		String path = calculateActualServerPath(getActualServerPath(), type, virtualFolderPath);
		//dir 中文
		path = new String(path.getBytes("ISO-8859-1"),"gbk");
		makeDirIfNotExists(path);
		java.io.File f = new java.io.File(new URI(path));
		java.io.File[] children = f.listFiles();
		
		List directories = new ArrayList();
		List files = new ArrayList();
		for (int a=0; a< children.length; a++) {
			if (children[a].isDirectory()) {
				directories.add(new Folder(children[a].getName()));
			}
			else {
				try {
					files.add(new File(children[a].getName(), fileSizeInKBytes(children[a])));
				}
				catch(Exception e) {
					e.printStackTrace();
				}
			}
		}
		return new FoldersAndFiles(
				(Folder[]) directories.toArray(new Folder[0]), 
				(File[]) files.toArray(new File[0])
		);
	}
	
	@Override
	protected Folder[] getFolders(String virtualFolderPath, String type) throws Exception {
		String path = calculateActualServerPath(getActualServerPath(), type, virtualFolderPath);
		//dir 中文
		path = new String(path.getBytes("ISO-8859-1"),"gbk");
		makeDirIfNotExists(path);
		java.io.File f = new java.io.File(new URI(path));
		java.io.File[] children = f.listFiles(new FileFilter() {
			public boolean accept(java.io.File pathname) {
				if (! pathname.isFile()) {
					return true;
				}
				return false;
			}
		});
		
		List tmpFolders = new ArrayList();
		for (int a=0; a< children.length; a++) {
			tmpFolders.add(new Folder(children[a].getName()));
		}
		
		return (Folder[]) tmpFolders.toArray(new Folder[0]);
	}

	@Override
	protected FileUploadResult fileUpload(String virtualFolderPath, String type, String filename, String contentType, java.io.File newFile) {
		try {
			virtualFolderPath = new String(virtualFolderPath.getBytes("ISO-8859-1"),"UTF-8");
			String tmpDir = calculateActualServerPath(getActualServerPath(), type, virtualFolderPath);
			makeDirIfNotExists(tmpDir);
			String tmpFile = tmpDir + filename;
			if(makeFileIfNotExists(tmpFile)) {
				// already exists
				int a=0;
				String ext = String.valueOf(a);
				tmpFile = calculateActualServerPath(getActualServerPath(), type, virtualFolderPath)+filename+ext;
				while(makeFileIfNotExists(tmpFile)) {
					a = a + 1;
					ext = String.valueOf(a);
					if (a > 100) {
						return FileUploadResult.invalidFile();
					}
				}
				copyFile(newFile, new java.io.File(new URI(tmpFile)));
				return FileUploadResult.uploadCompleteWithFilenamChanged(filename+ext);
			}
			else {
				copyFile(newFile, new java.io.File(new URI(tmpFile)));
				return FileUploadResult.uploadComplete();
			}
		}
		catch(Exception e) {
			return FileUploadResult.invalidFile();
		}
	}
	private ServletContext servletContext;

	public void setServletContext(ServletContext servletContext) {
		this.servletContext = servletContext;
	}
}

 
代码(org.RichtexteditorCreateFolderResultLocal):

/**
 * @author hjl
 * @date 2009-4-20
 * @function 
 * @version 
 */
public class RichtexteditorCreateFolderResultLocal
		extends
			RichtexteditorCreateFolderResult {

	@Override
	public void execute(ActionInvocation invocation) throws Exception {
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/xml; charset=UTF-8");
		response.setHeader("Cache-Control","no-cache");
		
		OutputStream os = response.getOutputStream();
		
		CreateFolderResult createFolderResult = richtexteditorCreateFolderResult(invocation);
		
//		CurrentFolder问题,转换为中文
		String currentFolder_path = getFolderPath(invocation);
		currentFolder_path = new String(currentFolder_path.getBytes("ISO-8859-1"),"GBK");
		
		String currentFolder_url = getServerPath(invocation);
		currentFolder_url = new String(currentFolder_url.getBytes("ISO-8859-1"),"GBK");
		
		Document document = buildDocument();
		Element root = buildCommonResponseXml(document, 
				getCommand(invocation), getType(invocation), 
				currentFolder_path, currentFolder_url);
		
		Element errorElement = document.createElement("Error");
		errorElement.setAttribute("number", createFolderResult.getCode());
		root.appendChild(errorElement);
		
//		if (_log.isDebugEnabled()) {
//			String result = stringFromDocument(document);
//			_log.debug(result);
//		}
		
		writeDocumentToStream(document, os);
		os.flush();
		os.close();
	}
	

}

 

代码(org.RichtexteditorGetFoldersAndFilesResultLocal):

/**
 * @author hjl
 * @date 2009-4-20
 * @function 
 * @version 
 */
public class RichtexteditorGetFoldersAndFilesResultLocal
		extends
			RichtexteditorGetFoldersAndFilesResult {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void execute(ActionInvocation invocation) throws Exception {
//		System.out.println("====本地====");
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/xml; charset=UTF-8");
		response.setHeader("Cache-Control","no-cache");
		
		OutputStream os = response.getOutputStream();
		
		Document document = buildDocument();
		
		//CurrentFolder问题,转换为中文
		String currentFolder_path = getFolderPath(invocation);
		currentFolder_path = new String(currentFolder_path.getBytes("ISO-8859-1"),"GBK");
		
		String currentFolder_url = getServerPath(invocation);
		currentFolder_url = new String(currentFolder_url.getBytes("ISO-8859-1"),"GBK");
		
		
//		Element root = buildCommonResponseXml(document, 
//				getCommand(invocation), getType(invocation), 
//				getFolderPath(invocation), getServerPath(invocation));
		
		//buildCommonResponseXml这个方法是关键 MAIN()
		Element root = buildCommonResponseXml(document, 
				getCommand(invocation), getType(invocation), 
				currentFolder_path, currentFolder_url);
		
		FoldersAndFiles foldersAndFiles = richtexteditorFoldersAndFiles(invocation);
		
		Folder[] folders = foldersAndFiles.getFolders();
		File[] files = foldersAndFiles.getFiles();
		
		Element foldersElement = document.createElement("Folders");
		if (folders != null) {
			for (int a=0; a< folders.length; a++) {
				Element folderElement = document.createElement("Folder");
				folderElement.setAttribute("name", folders[a].getFoldername());
				foldersElement.appendChild(folderElement);
			}
		}
		root.appendChild(foldersElement);
		
		Element filesElement = document.createElement("Files");
		if (files != null) {
			for (int a=0; a< files.length; a++) {
				Element fileElement = document.createElement("File");
				fileElement.setAttribute("name", files[a].getFilename());
				fileElement.setAttribute("size", String.valueOf(files[a].getSizeInKb()));
				filesElement.appendChild(fileElement);
			}
		}
		root.appendChild(filesElement);
		
//		if (_log.isDebugEnabled()) {
//			String result = stringFromDocument(document);
//			_log.debug(result);
//		}
		
		writeDocumentToStream(document, os);
		os.flush();
		os.close();
	}
}

 
代码(org.RichtexteditorGetFoldersResultLocal):

/**
 * @author hjl
 * @date 2009-4-20
 * @function 
 * @version 
 */
public class RichtexteditorGetFoldersResultLocal
		extends
			RichtexteditorGetFoldersResult {

	@Override
	public void execute(ActionInvocation invocation) throws Exception {
		Folder[] folders = richtexteditorFolders(invocation);
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/xml; charset=UTF-8");
		response.setHeader("Cache-Control","no-cache");
		
		OutputStream os = response.getOutputStream();

		Document document = buildDocument();
		
//		CurrentFolder问题,转换为中文
		String currentFolder_path = getFolderPath(invocation);
		currentFolder_path = new String(currentFolder_path.getBytes("ISO-8859-1"),"GBK");
		
		String currentFolder_url = getServerPath(invocation);
		currentFolder_url = new String(currentFolder_url.getBytes("ISO-8859-1"),"GBK");
		
		Element root = buildCommonResponseXml(document, 
				getCommand(invocation), getType(invocation), 
				currentFolder_path, currentFolder_url);
		
		Element foldersElement = document.createElement("Folders");
		if (folders != null) {
			for (int a=0; a< folders.length; a++) {
				Element folderElement = document.createElement("Folder");
				folderElement.setAttribute("name", folders[a].getFoldername());
				foldersElement.appendChild(folderElement);
			}
		}
		root.appendChild(foldersElement);
		
//		if (_log.isDebugEnabled()) {
//			String result = stringFromDocument(document);
//			_log.debug(result);
//		}
		
		writeDocumentToStream(document, os);
		os.flush();
		os.close();
	}

}

 
5.在xwork.xml文件中添加如下代码:

<package name="richtexteditor-browse" extends="webwork-default" namespace="/webwork/richtexteditor/editor/filemanager/browser/default/connectors/jsp">
    	<result-types>
            <result-type name="richtexteditorGetFolders" class="org.RichtexteditorGetFoldersResultLocal" />    		
            <result-type name="richtexteditorGetFoldersAndFiles" class="org.RichtexteditorGetFoldersAndFilesResultLocal" />    		
            <result-type name="richtexteditorCreateFolder" class="org.RichtexteditorCreateFolderResultLocal" />    		    	
    	</result-types>
    	<action name="connector" class="org.RichtexteditorConnector" method="browse">
    		<param name="actualServerPath">
            /upload/
            </param>
            <param name="serverPath">
            /upload/
            </param>
    		<result name="getFolders" type="richtexteditorGetFolders" />
    		<result name="getFoldersAndFiles" type="richtexteditorGetFoldersAndFiles" />
    		<result name="createFolder" type="richtexteditorCreateFolder" />
    		<result name="fileUpload" type="richtexteditorFileUpload" />
    	</action>
    </package>
    
    <package name="richtexteditor-upload" extends="webwork-default" namespace="/webwork/richtexteditor/editor/filemanager/upload">
		<action name="uploader" class="org.RichtexteditorConnector" method="upload">
			<param name="actualServerPath">
            /upload/
            </param>
            <param name="serverPath">
            /upload/
            </param>
			<result name="richtexteditorFileUpload" />
		</action>    
    </package>

 
6.同时pom.xml jar必须有:

<dependencies>
    <dependency>
      <groupId>opensymphony</groupId>
      <artifactId>webwork</artifactId>
      <version>2.2.4</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.0-rc2</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.1</version>
    </dependency>
  </dependencies>

 
最后在ftl页面中显示出来:

<@ww.richtexteditor 
   defaultLanguage ="zh-cn" 
   toolbarCanCollapse="false" 
   label="内容(content):" 
        height ="360" 
   name="model.content"/>

 
一步一步配置就可以将问题解决了。

分享到:
评论

相关推荐

    WebWork ww标签

    WebWork的ww标签库极大地方便了开发者在JSP页面上的数据操作和逻辑控制,通过使用`&lt;ww:if&gt;`、`&lt;ww:iterator&gt;`、`&lt;ww:set&gt;`和`&lt;ww:property&gt;`等标签,开发者可以更简洁、高效地编写动态页面,减少代码量,提高开发...

    webwork标签

    WebWork标签库分为多个类别,包括通用标签、组件化标签、流程控制标签、迭代标签、UI标签、VUI标签以及国际化支持标签。 1. **通用标签**: - `&lt;ww:property&gt;`:用于获取结果的属性值,如果未指定值,将从值栈顶部...

    webwork中文帮助文档

    WebWork是一个开源的Java Web应用程序框架,...无论你是初学者还是经验丰富的开发者,都可以从中找到所需的信息,解决实际开发中的问题。通过阅读和理解这份文档,你将能够熟练地利用WebWork构建高效、稳定的Web应用。

    webwork中文 webwork中文参考 webwork中文资料 webwork学习资料

    ### WebWork中文学习资料 #### WebWork框架概览 WebWork是一个由OpenSymphony组织开发的J2EE Web框架,其设计目标在于组件化和代码重用,采用MVC(Model-View-Controller)模式。WebWork框架的核心分为两部分:...

    WebWork标签手册

    这些标签共同构成了WebWork框架数据处理的核心部分,通过对它们的理解和掌握,开发者可以更加高效地构建和管理Web应用中的数据流,提升应用程序的性能和用户体验。在实际开发中,合理运用这些标签,不仅可以简化编码...

    webwork中文文档

    从给定的文件信息来看,标题和描述都指向了“webwork中文文档”,这暗示了文档的主要内容将围绕WebWork框架展开。WebWork是一个开源的Java Web应用开发框架,它在2000年初非常流行,是Struts框架的一个替代方案,...

    webwork标签的使用和介绍

    WebWork 是一款基于 Java 的 MVC(Model-View-Controller)框架,它提供了强大的标签库来简化JSP页面的开发。这些标签使得开发者能够更高效地处理业务逻辑、数据展示和用户交互。以下是对WebWork标签的详细介绍: 1...

    webwork中上传文件

    在本例中,我们关注的是使用WebWork框架在Java环境中实现文件上传。WebWork是一个轻量级的MVC(Model-View-Controller)框架,它提供了处理HTTP请求和响应的强大工具,包括文件上传。 首先,我们需要了解WebWork的...

    WebWork入门教程[创建你第一个WebWork action]

    在WebWork的学习过程中,了解它的设计理念、掌握Action的创建和配置,以及熟练使用拦截器和值栈,将有助于提升你构建高效、可维护的Java Web应用的能力。同时,WebWork与Struts2的紧密联系,也意味着学习WebWork对...

    WebWork2配置

    在这个“WebWork2配置”主题中,我们将深入探讨如何设置和优化WebWork2框架,以便在你的项目中实现高效且可维护的代码。 首先,WebWork2的配置主要涉及到以下几个方面: 1. **web.xml配置**:这是所有Java Web应用...

    webwork中文参考手册

    在学习过程中,除了阅读手册,还建议动手实践,结合实际项目加深理解,以便更好地应用WebWork框架解决实际问题。此外,了解WebWork的进化历程和它如何与Struts2等其他框架融合也很有帮助,因为这能让你了解框架的...

    webwork的上传和下载的Demo

    在Web开发中,文件上传和下载是常见的功能需求,本Demo展示了如何在WebWork框架下实现这两个操作。 首先,我们要理解上传和下载的基本原理。文件上传是指用户通过Web表单选择本地文件,然后将其发送到服务器的过程...

    webwork2.17中文使用手册

    webwork2.17中文使用手册

    webwork 控制反转小例子,配置文件的写法

    控制反转(IoC)是一种设计原则,它将对象的创建和管理职责从应用程序代码转移到外部容器,如配置文件或依赖注入框架。这样,代码不再直接创建对象,而是声明它们所需的依赖关系,由IoC容器负责实例化和装配这些依赖...

    webwork 配置文件

    在WebWork中,配置文件起着至关重要的作用,特别是`xwork.xml`和`web.xml`。 `xwork.xml`是WebWork的核心配置文件,用于定义动作(Action)和它们的行为。这个文件主要包括以下部分: 1. **Action配置**:在这个...

    webwork2中文教程

    在本教程中,你将学习如何配置WebWork2的XML配置文件,包括Action Mapping、Interceptor配置等。你还将了解如何创建和使用Action,以及如何实现视图的跳转。教程还将涵盖WebWork2与其他技术(如Spring、Hibernate)...

    webwork

    在提供的"Webwork2 Guide.pdf"文档中,你可能会学习到如何安装配置WebWork2环境,创建和运行第一个WebWork应用程序,理解Action和Interceptor的工作原理,以及如何利用WebWork的特性进行表单处理、异常管理和国际化...

    WebWork UI标签

    WebWork UI标签是一种用于构建Web应用程序用户界面的组件,它提供了丰富的功能,使得开发者能够更加便捷地创建交互式的Web页面。WebWork是一个不绑定特定视图技术的框架,支持多种模板语言,如JSP、Velocity和...

    WEBWORK

    在提供的配置中,创建了一个名为 "default" 的包,并扩展了 "webwork-default" 包,这意味着它继承了父包的所有配置。 - **Action** 配置:每个 `&lt;action&gt;` 元素定义了一个特定的业务逻辑处理单元。`name` 属性是 ...

    webwork2中文文档

    3. **视图与模板**:探讨JSP、FreeMarker或其他模板引擎在WebWork2中的使用,解释如何创建和管理视图组件,以及如何通过OGNL(Object-Graph Navigation Language)表达式在视图中访问模型数据。 4. **模型**:讨论...

Global site tag (gtag.js) - Google Analytics