主题: linux系统下上传图片,提示"服务器发生故障",怎么解决???
作者: lena, 发布日期: 2010-12-29 17:05:48, 浏览数: 6989

本人在struts2项目中使用了kindeditor3.4.3,在windows下可以正常上传图片,但是部署到linux下上传图片总是提示“服务器发生故障”。

一、项目目录结构

二、做过的修改

1、修改了保存路径用"/"代替了"//"

2、修改了保存目录的权限为可写可读

但是,一直不能解决问题,特在贵宝地发帖,请求各位高手的帮助!

三、相关文件代码

1、kindedit\meditor.htm文件部分代码

KE.show({
   id : 'content1',
   tid:tid,
   imageUploadJson : '/kindedit/struts2Upload.jsp',
   fileManagerJson : '/kindedit/file_manager_json.jsp',
   allowFileManager : true,
   afterCreate : function(id) {
    KE.event.ctrl(document, 13, function() {
     KE.util.setData(id);
    });
    KE.event.ctrl(KE.g[id].iframeDoc, 13, function() {
     KE.util.setData(id);

    });
   }
  });

2、kindedit\plugins\image\image.html文件修改如下:

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

3、上传图片文件(struts2Upload.jsp)的代码如下:

<%@ page language="java" pageEncoding="GBK"%>   
<%@page import="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("/")   
            + "attached/" + newName);   
    //设置 KE 中的图片文件地址    
    String newFileName = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()   
            + request.getContextPath() + "/attached/" + newName;
    System.out.println(newFileName);
    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>");   
%>

作者: Roddy, 发布日期: 2010-12-29 18:25:31

用Firebug可以查看具体错误信息。

http://www.kindsoft.net/doc.php?cmd=qna#007

回复
作者: lena, 发布日期: 2010-12-31 11:01:08

firebug确实好用,问题找出并解决,原来是过滤器的问题.


谢谢提醒~~~~

回复
发表新帖 发表回复