使用ckeditor+struts2+freemaker的图片上传

在网上阅读了很多同志的资料...加上自己进段时间要开发新闻模块..下面就贴出例子

首先这个例子是采用ckeditor和Struts2实现的图片上传

 

这里先要把必须的包添加进来

 

 

 

然后是写ckeditor的测试页: test.html

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript" src="ckeditor/ckeditor.js"></script>  
  <link rel="stylesheet" type="text/css" href="ckeditor/contents.css"/>
	<style type="text/css">  
	* {  
	    font-family: "宋体";  
	    font-size: 14px  
	}  
	</style>  

<title>CKEditor Testing</title>
</head>
<body>

	<form id="form1" name="form1" method="post" action="ck">  
	   <table width="650" height="400" border="0" align="center">  
	    <tr>  
	       
	        <td><textarea cols="80" id="content" name="content"></textarea> 
	        <script type="text/javascript">  
	             CKEDITOR.replace('content',addUploadButton(this));

	             function addUploadButton(editor) {
	            	  CKEDITOR.on('dialogDefinition', function( ev ){
	      		        var dialogName = ev.data.name;
	      		        var dialogDefinition = ev.data.definition;
	      		        if ( dialogName == 'image' ){
	      		            var infoTab = dialogDefinition.getContents( 'info' );
	      		            infoTab.add({
	      		                type : 'button',
	      		                id : 'upload_image',
	      		                align : 'center',
	      		                label : '上传',
	      		                onClick : function( evt ){
	      		                    var thisDialog = this.getDialog();
	      		                    var txtUrlObj = thisDialog.getContentElement('info', 'txtUrl');
	      		                    var txtUrlId = txtUrlObj.getInputElement().$.id;

	      		                    addUploadImage(txtUrlId);
	      		                }
	      		            }, 'browse'); //place front of the browser button
	      		        }
	      		    });
			     }


			     function addUploadImage(theURLElementId) {
			    	      //var uploadUrl = "uploadFiles.jsp";
			    	 //var imgUrl = window.open('uploadFiles.jsp','_blank');
			    	      var imgUrl = window.showModalDialog("uploadFiles.jsp"); 
			    	      alert(imgUrl);
			    	 //var urlObj = document.getElementById(theURLElementId);
					// urlObj.value = imgUrl;
					// urlObj.fireEvent("onchange");
						    	 
			     }  
	        </script></td>  
	    </tr>  
	    <tr>  
	 
	        <td><input type="submit" name="Submit" value="提交" /> 
	        <input type="reset" name="Reset" value="重置" /></td>  
	    </tr>  
	</table>  
	</form>  

</body>
</html>

 再写struts.xml文件:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	 	 <!--  
	 <constant name="struts.devMode" value="true" />
	 -->
	 <package name="index"  extends="struts-default">
       
        <action name="ck" class="com.lee.action.CKAction" >
           <result name="success" type="freemarker">freemarker/ck.ftl</result>
       </action> 
       <!--         
         <action name ="fileUpload" class ="com.lee.action.MyUploadAction" > 
            <interceptor-ref name ="fileUploadStack" /> 
            <result name ="success">/testStrutsView.jsp </result > 
       </action >
       -->
       
        <action name ="fileUpload" class ="com.lee.action.MyUploadAction2" > 
            <interceptor-ref name ="fileUploadStack" /> 
            <result name ="success">uploadFiles.jsp </result > 
       </action >  
    </package>
      

</struts>

 

写Action类:

 

package com.lee.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class MyUploadAction2 extends ActionSupport {
    
	private static final long serialVersionUID = 572146812454l ;
    private static final int BUFFER_SIZE = 16 * 1024 ;
     
	private File myFile;
	private String contentType;
    private String fileName;
    private String imageFileName;
    private String pagePath;	
    
    public String getPagePath() {
		return pagePath;
	}

	public void setPagePath(String pagePath) {
		this.pagePath = pagePath;
	}

    
    public void setMyFileContentType(String contentType) {
        this .contentType = contentType;
   } 
   
    public void setMyFileFileName(String fileName) {
        this .fileName = fileName;
   } 
       
    public void setMyFile(File myFile) {
        this .myFile = myFile;
   } 
   
    public String getImageFileName() {
        return imageFileName;
   } 
	public static void copy(File src,File dst) {
		try {
            InputStream in = null ;
            OutputStream out = null ;
             try {                
                in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                 byte [] buffer = new byte [BUFFER_SIZE];
                 while (in.read(buffer) > 0 ) {
                    out.write(buffer);
                } 
            } finally {
                 if ( null != in) {
                    in.close();
                } 
                 if ( null != out) {
                    out.close();
                } 
            } 
        } catch (Exception e) {
            e.printStackTrace();
        } 
	}
	
	 private static String getExtention(String fileName) {
         int pos = fileName.lastIndexOf(".");
         return fileName.substring(pos);
    } 


	public String execute() {
		imageFileName = "mypic_"+fileName;
		pagePath = "ckeditor/images/Image/"+ imageFileName;
        File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/ckeditor/images/Image" ) + "/" + imageFileName);
        copy(myFile, imageFile);
		return Action.SUCCESS;
		
	}
}

 

上面的是图片的上传类:

 

下面是图片上传页面:

uploadFiles.jsp

 

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="java.text.*" %>    
<%@ page import="java.util.*" %>
<%@page import="com.opensymphony.xwork2.ActionContext"%>  
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns ="http://www.w3.org/1999/xhtml" >
   <head>
       <%
         String name = (String)request.getAttribute("imageFileName");
         String pagename = (String)request.getAttribute("pagePath");
         if(name != null){
          System.out.println(name);
          System.out.println(pagename);
          out.println("上传成功");
       }
        
       %>
   </head>
   <body>		
		<form action="fileUpload" method="POST" name="pos" enctype="multipart/form-data" >
		
		      <table width="80%" border="1" cellspacing="0" cellpadding="0">
		           <tr>
					 <s:file name="myFile"></s:file>
		           </tr>
		      </table>
		           <input type="submit" value="上传">
		</form>
		<input type="text" id="name2"  width="90%" value="<%=pagename %>">
		
	</body>
	<script type="text/javascript">
	    var nameid = document.getElementById("name2").value;
	    if(nameid!="null"){
	    alert("你传递的参数是: "+nameid);
		   window.returnValue=nameid;
		
	    }
   </script>   
 </html> 

 

 

接着是写一个Action负责把FreeMaker的处理:

 

package com.lee.action;

import com.lee.model.TextArea;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class CKAction extends ActionSupport {

	private String content;
	
	TextArea tx  = new TextArea();
	
	public TextArea getTx() {
		return tx;
	}


	public void setTx(TextArea tx) {
		this.tx = tx;
	}


	public String execute() {
		
		
		tx.setContent(this.getContent());
		
		return Action.SUCCESS;
	}
	

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
}
 

 

你可能感兴趣的:(JavaScript,freemarker,jsp,css,struts)