Kindeditor实现图片上传(strut2版)

 平时没有注意

html编辑器上传图片的问题,这次做了个小项目,突然发现了。

html编辑器上传图片的问题,这次做了个小项目,突然发现了。

 

 

 

Strut2 结合kindeditor时出现图片不能上传的问题。

先是在网上找了很多办法,还是先回顾一下流程吧。呵呵

 

1.  换编辑器

先是sinaeditor 这个编辑器简单,可是默认只有asp版本的,后来在csdn上找了一个jsp版本的,还是不能上传图片,同时的错误。

再换,弄一个很大的编辑器FCKeditor ,在他的官方网站上下了java版本的,与struts2整合的时候,发现同样的错误,不能上传图片。

2.  三个编辑器的用过了,错误是同样的,不能上传图片。再搜索过程中发现,kindeditor一个中文版的论坛,下定决心用kindeditor。网址是:http://www.kindsoft.net/,有基论坛上有这样一篇文章http://www.kindsoft.net/view.php?bbsid=5&postid=656&pagenum=29 发现图片上传是通过一个iframe来实现无刷新的文件上传,再图片上传后返回的是json格式的信息,并通过ajax获得这些信息。

 

于是想出了如下解决办法:

1、利用struts2 原始的方法实现图片上传

2、在上传图片后,在action中利用PrintWriter打印json格式的数据。

 

代码如下:

1、demo.jsp

 

 

 

2.EditImageAdd.java

//*******************************************************************//
//
//** 创建人:   何岳军
//
//** 日  期:   2010-02-18
//
//** 描  述:  编辑器图片上传
//
//** 版  本:  
//
//*******************************************************************//

package eshop.action.admin;
import java.util.*;
import java.io.*;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.json.simple.JSONObject;

import com.opensymphony.xwork2.*;

import eshop.*;
import com.dao.*;

public class EditImageAdd extends ActionSupport {
	
	private String id;
	private String imgTitle;
	private String imgWidth;
	private String imgHeight;
	private String imgBorder;
	
	private List<File> imgFile;				//文件
	private List<String>imgFileFileName; 		//文件名
	private List<String> imgFileContentType; 	//文件路径
	private String fileurl;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getImgTitle() {
		return imgTitle;
	}

	public void setImgTitle(String imgTitle) {
		this.imgTitle = imgTitle;
	}

	public String getImgWidth() {
		return imgWidth;
	}

	public void setImgWidth(String imgWidth) {
		this.imgWidth = imgWidth;
	}

	public String getImgHeight() {
		return imgHeight;
	}

	public void setImgHeight(String imgHeight) {
		this.imgHeight = imgHeight;
	}

	public String getImgBorder() {
		return imgBorder;
	}

	public void setImgBorder(String imgBorder) {
		this.imgBorder = imgBorder;
	}

	public List<File> getImgFile() {
		return imgFile;
	}

	public void setImgFile(List<File> imgFile) {
		this.imgFile = imgFile;
	}

	public List<String> getImgFileFileName() {
		return imgFileFileName;
	}

	public void setImgFileFileName(List<String> imgFileFileName) {
		this.imgFileFileName = imgFileFileName;
	}

	public List<String> getImgFileContentType() {
		return imgFileContentType;
	}

	public void setImgFileContentType(List<String> imgFileContentType) {
		this.imgFileContentType = imgFileContentType;
	}

	public String getFileurl() {
		return fileurl;
	}

	public void setFileurl(String fileurl) {
		this.fileurl = fileurl;
	}


	public String execute(){
		
		
		try{
			//上传图片
			
			FileUpTool fileUpTool= new FileUpTool();
			for(int i=0;i<imgFile.size();i++){
				if(fileUpTool.saveFile(imgFile.get(i), imgFileFileName.get(i),"attached")>0){
					this.fileurl=fileUpTool.getFileurl();
					String root = ServletActionContext.getRequest().getRealPath("attached");
					root+="\\";
	                String temp = "parent.KE.plugin[\"image\"].insert(\'"+id+"','/sansui/attached/"+this.fileurl+"','"+imgTitle+"','"+imgWidth+"','"+imgHeight+"','"+imgBorder+"');";
	                StringBuffer sb = new StringBuffer();
	                sb.append("<html>"); 
	                sb.append("<head>");       
	                sb.append("<title>Insert Image</title>");  
	                sb.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");   
	                sb.append("</head>");            
	                sb.append("<body>");        
	                sb.append("<script type=\"text/javascript\">"+temp+";</script>");   
	                sb.append("</body>");             
	                sb.append("</html>");         
	                String out = sb.toString();
					
	                try {   
	            		PrintWriter pw = null;  
	            		HttpServletResponse response = ServletActionContext.getResponse();
	            		response.setContentType("text/html;charset=gb2312");        
	                    response.setHeader("Cache-Control","no-cache");   
	                	//输出ajax内容            
	                	response.setHeader("Content-Type", "text/html;charset=gb2312");           
	                	response.getWriter().write(out );        
	                	} catch (IOException e) {            
	                		// TODO Auto-generated catch block            
	                		e.printStackTrace();        

	                }
					
					
				}
			}
			return null;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	
	
}

 

 

说明:其中的FileUpTool 是文件上传的功能类,很简单,就是一些方面的封装,自己实现一下。

 

3.struts.xml

	<!-- 编辑器上图片上传 -->
		<action name="adminEditImageAdd" class="eshop.action.admin.EditImageAdd">
			<interceptor-ref name="fileUpload">
					<param name="maximumSize">10485760</param><!-- maxinumSize: 10M -->
					<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/GIF,image/JPG,image/pjpeg,image/x-png</param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>			
				
		</action>

 

 

上传的问题解决了,但是新的问题双来了,就是插入文章中的图片不能删除,kindeditor还没有这个功能。这个也要自己来实现。汗

你可能感兴趣的:(json,jsp,Ajax,fckeditor,asp.net)