我把你的代码复制下来测试了一下,tomcat 4.0/jdk1.4下没什么大问题啊,文件也正确上传了。只不过
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
这几句HTML没有输出到客户端而已。贴一下你的提交表单的页面。顺利说说你的软件环境。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
这几句HTML没有输出到客户端而已。贴一下你的提交表单的页面。顺利说说你的软件环境。
是不是类没有被引入吧
java.lang.NoClassDefFoundError: javax/servlet/ServletRequest
at org.apache.jsp.do_0005fupload$jsp._jspService
不用我多说了吧。
http://www.knowsky.com/3136.html
和这个贴子
http://expert.csdn.net/Expert/topic/2615/2615124.xml?temp=.9838068
<%---------┃ 作用: 教学演示 ┃-------%>
<%-------------------------------------------%><%@ page contentType="text/html;charset=gb2312" %>
<%@page import="java.io.*"%>
<%@page import="javax.servlet.*"%>
<%!
ServletInputStream si=null;
StringBuffer ln=null;//字符串缓存
String st=null;//存放一行的数据int len=0;//每次读取的数据长度。byte[] buffer=new byte[1000];//每次缓存的数据
//读取一行
public String getNextLine()
{
StringBuffer sb=new StringBuffer();
try
{
len=si.readLine(buffer ,0,1000);
if(len>0)
{
for(int i=0;i<len;i++)
{
char b=(char)buffer[i];
sb.append(b);
}
return sb.toString();
}
}catch(Exception err)
{
}
return null;
}
//按字节读取一行
public byte[] getBytes()
{
try
{
len=si.readLine(buffer,0,1000);
}catch(Exception err)
{
return null;
}
if(len<=0)
{
return null;
}
byte[] data=new byte[len];
System.arraycopy(buffer,0,data,0,len);
return data;
}
//解析文件名
public String getFileName(String con)
{
String fileName=con.substring(con.indexOf('"')+1,con.lastIndexOf('"'));//去掉引号 int i1=fileName.lastIndexOf("\\");
int i2=fileName.lastIndexOf("/"); if(i1!=-1)
{
fileName=fileName.substring(i1+1);
} if(i2!=-1)
{
fileName.substring(i2+1);
}
return fileName;
}//把字节数组转换为字符串
public String getAsString(byte[] data)
{
StringBuffer sb=new StringBuffer();
for(int i=0;i<data.length;i++)
{
char c=(char)data[i];
sb.append(c);
}
return sb.toString();
}
%>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<font color=red>正在上传......</font><br>
<%
//得到输入数据流
si=request.getInputStream();
//读取第一行
String bond=getNextLine(); //读取第一行:解析文件的界限---表示文件开始
if(bond.endsWith("\n"))
{
bond=bond.substring(0,bond.length()-2);
out.println(bond+"<br>");
}String tmp=null;while((tmp=getNextLine())!=null)
{
String filename=null;
String contype=null;
out.print("原始的文件名行:"+tmp+ "<br>");
int idx=tmp.indexOf("filename");
if(idx==-1)
{
idx=tmp.indexOf("name");
continue;
}
filename=getFileName(tmp.substring(idx));//解析出文件名
out.println("文件名是:" + filename+"<br>"); String type=getNextLine();//文件名后面一行是文件类型
out.print("原始的文件类型行:"+type+"<br>");
contype=type.substring(type.indexOf(' ')+1);
out.print("文件类型:"+contype+"<br>");
String no=getNextLine();
out.print("数据开始啦:" + no+"<br>");//没有作用:一行空行-----表示数据开始 File f=new File("c:\\" + filename);
FileOutputStream fos=new FileOutputStream(f); byte[] data=getBytes();
while(!getAsString(data).startsWith(bond))//遇到文件开始边界,表示下一个文件开始,退出循环
{
fos.write(data);//写数据(每次写1000个字节,若你高兴的话,可以每次读取1024个字节)
data=getBytes();
}
fos.close();
}
%>
<br><font color=green>传递完毕</font>
</BODY>
</HTML>
是什么问题,你怎么解决的,说出来大家参考一下,就不怕遇到同样的问题了。