长话短说,我把我修改的地方贴出来
打开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,大家可以多试试.