commons-fileupload组件上传问题

html源码upload.html很简单:
[code]<h1> 文件上传演示</h1>
<form name="uploadform" method="POST" action="upload" ENCTYPE="multipart/form-data">

<table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF">
<tr>
<td width="100%" colspan="2">
文件1:<input name="a" size="40" type="file">
</td>
</tr></table>[/code]
java源码Uplad.java是:
[code]import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Iterator;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;


public class Upload extends HttpServlet {


private static final long serialVersionUID = 1L;



public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html; charset=GB2312");

PrintWriter out = response.getWriter();

try {

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload sevletFileUpload = new ServletFileUpload(factory);

// 设置允许用户上传文件大小,单位:字节,这里设为2m

sevletFileUpload.setSizeMax(2 * 1024 * 1024);

// 设置最多只允许在内存中存储的数据,单位:字节

factory.setSizeThreshold(4096);

// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

factory.setRepository(new File("d:\\upload\\temp"));

// 开始读取上传信息

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 {

// 保存上传的文件到指定的目录

// 在下文中上传文件至数据库时,将对这里改写开始

item.write(new File("d:\\upload\\"+ m.group(1)));



out.print(name + "  " + size + "<br>");

// 在下文中上传文件至数据库时,将对这里改写结束

} 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);

}

}

}
[/code]
web.xml源码:
[code]<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>Upload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>[/code]
为什么运行不了呢?Tomcat一直显示如下提示:
[quote]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception


root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:191)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:350)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
Upload.doPost(Upload.java:87)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
[/quote]
87行是[code]List fileItems = sevletFileUpload.parseRequest(request);[/code]这一行,不知道为啥会出现这样的错误。把程序简化成单个文件上传的代码也是出现一样的问题。也照apche的官方网站去看了那个指南,照那个做的,也是这里出错。实在是搞不懂了,为什么看到的都是好好的,到我这里就出错了呢?是哪里少做了什么吗?能想到的就只有那个jar文件导入有误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值