修改飞鱼在线编辑器的上传组件经历

最近做项目的时候使用eWebEditor飞鱼在线编辑器,本地测试上传的时候没有出现上传不上等延迟问题,等放到服务器上时才发现,一个十几K的文件在服务器繁忙的时候上传都很困难,查看eWebEditor的上传脚本,发现一些不利于上传的地方(这里暂时不说不利之处).后来发现commons-fileupload不错,想把它跟eWebEditor整合到一起.

     长话短说,我把我修改的地方贴出来

打开upload.jsp文件,在顶部添加如下代码
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="org.apache.commons.fileupload.FileUploadException"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="javax.servlet.ServletException"%>


找到//存文件
  //DoSave();
........

 // Upload
........
// }
大概有21行代码,注释掉,换成以下代码
try {
   DiskFileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload sevletFileUpload = new ServletFileUpload(factory);
   SimpleDateFormat format = new SimpleDateFormat("yyyyMMddmmssSSS");

   //设置允许用户上传文件大小,单位:字节,这里设为2m
   sevletFileUpload.setSizeMax(20 * 1024 * 1024);

   //设置最多只允许在内存中存储的数据,单位:字节
   factory.setSizeThreshold(4096);

   //设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
   factory.setRepository(new java.io.File(request.getRealPath("temp")+System.getProperty("file.separator")));

   //开始读取上传信息
   List fileItems = sevletFileUpload.parseRequest(request);

   //依次处理每个上传的文件
   Iterator iter = fileItems.iterator();

   //正则匹配,过滤路径取文件名
   String regExp = ".+(.+)$";

   //过滤掉的文件类型
   String[] errorType = { ".exe", ".com", ".cgi", ".asp" };
   Pattern p = Pattern.compile(regExp);

     while (iter.hasNext()) {     
         FileItem item = (FileItem) iter.next();

         // 忽略其他不是文件域的所有表单信息
         if (!item.isFormField()) {

             String name = item.getName();
             long size = item.getSize();

             if ((name == null || name.equals("")) && size == 0)
                  continue;

             Matcher m = p.matcher(name);
             boolean result = m.find();

             if (result) {

                  for (int temp = 0; temp < errorType.length; temp++) {
                       if (m.group(1).endsWith(errorType[temp])) {
                           throw new IOException(name + ": 非法文件类型禁止上传");
                       }
                  }

                  try{
                  //保存上传的文件到指定的目录
                 sSaveFileName = format.format(new java.util.Date()).concat(m.group(1).substring(m.group(1).lastIndexOf(".")));
                  item.write(new java.io.File(request.getRealPath("UploadFile")+System.getProperty("file.separator")+sSaveFileName));

                  }catch(Exception e){
                     out.println(e);
                  }
             }else{
                  throw new IOException("fail to upload");
             }
         }
    }
}catch (IOException e){
    out.println(e);
}catch (FileUploadException e){
    out.println(e);
}
sOriginalFileName="OriginalFileName";
sPathFileName=sUploadDir+sSaveFileName;

//保存上传的文件到指定的目录
sSaveFileName
这个引用以前的变量,把新的文件名赋给sSaveFileName

如果你的WebService提供utf-8的话,把144行的sContent=new String(request.getParameter("eWebEditor_UploadText")).getBytes("iso8859-1");去掉,否则传入数据库的content中的中文就是乱码.


这下在编辑器里打开上传,并点击上传的时候,upload.jsp调用commons-fileupload上传,我这里往服务器内存里一次性写入16KB,以前是4096Byte,大家可以多试试.

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值