`
dsea
  • 浏览: 43882 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

kindeditor struts2 图片上传

阅读更多

关于kindeditor和struts的图片上传,网上有很多方法,但很多都很复杂,比如通过Action处理,还要修改配置文件等,关键是还让人看的一头雾水。现在介绍一种简单的方法,只要添加一个jsp页面,和修改部分页面代码就行了(此方法结合网上的部分代码,dsea总结,并非原创!)。

 

1.项目中加入kindeditor,这一步大家应该都很清楚,就不累述了。

 

2.添加jar包支持,需要commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar、json_simple-1.1.jar。kindeditor的lib目录下有这三个jar文件。

 

3.找到kindeditor目录下的plugins/image/image.html页面,修改如下代码,默认为php,修改为你的jsp上传处理页面。

var imageUploadJson = (typeof KE.g[id].imageUploadJson == 'undefined') ? '../../jsp/struts2Upload.jsp ' 

 

4.把struts2Upload.jsp添加到kindeditor目录/jsp/目录下,struts2Upload.jsp代码为:

 

<%@ page language="java" pageEncoding="GBK"%>  
<%@page  
    import="java.util.*,java.io.*,  
    org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper,  
    java.util.concurrent.locks.*"%>  
<%  
    //Struts2  请求 包装过滤器  
    MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;  
    // 获得上传的文件名   
    String fileName = wrapper.getFileNames("imgFile")[0];  
    //获得未见过滤器   
    File file = wrapper.getFiles("imgFile")[0];  
    //----------- 重新构建上传文件名----------------------  
    final Lock lock = new ReentrantLock();  
    String newName = null;  
    lock.lock();  
    try {  
        //加锁为防止文件名重复   
        newName = System.currentTimeMillis()  
                + fileName.substring(fileName.lastIndexOf("."),  
                        fileName.length());  
    }finally {  
        lock.unlock();  
    }  
    //------------ 锁结束 -------------  
    //获取文件输出流   
    FileOutputStream fos = new FileOutputStream(request.getSession()  
            .getServletContext().getRealPath("/")  
            + "ke_upload\\" + newName);  
    //设置 KE 中的图片文件地址   
    String newFileName = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()  
            + request.getContextPath() + "/ke_upload/" + newName;  
    byte[] buffer = new byte[1024];  
    //获取内存中当前文件输入流   
    InputStream in = new FileInputStream(file);  
    try {  
        int num = 0;  
        while ((num = in.read(buffer)) > 0) {  
            fos.write(buffer, 0, num);  
        }  
    } catch (Exception e) {  
        e.printStackTrace(System.err);  
    } finally {  
        in.close();  
        fos.close();  
    }  
    //发送给KE   
    out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>");  
    out.println("<script type='text/javascript'>");  
    out.println("parent.parent.KE.plugin['image'].insert('"  
            + wrapper.getParameter("id") + "','" + newFileName + "','"  
            + wrapper.getParameter("imgTitle") + "','"  
            + wrapper.getParameter("imgWidth") + "','"  
            + wrapper.getParameter("imgHeight") + "','"  
            + wrapper.getParameter("imgBorder") + "','"  
            + wrapper.getParameter("align") + "');</script>");  
    out.println("</body></html>");  
%>  

 

5.根据struts2Upload.jsp页面中上传图片的保存路径在WebRoot目录下建立ke_upload文件夹。

 

6.ok,这样就可以上传图片了,但是好像kindeditor没提供删除已上传的图片功能,感觉有点点缺陷。

 

 

分享到:
评论
2 楼 dsea 2012-09-15  
greatghoul 写道
这种用 struts2 确实是。。。

什么意思?
1 楼 greatghoul 2012-08-23  
这种用 struts2 确实是。。。

相关推荐

Global site tag (gtag.js) - Google Analytics