<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<html>
<head>
<title>upFile</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body bgcolor="#ffffff">
<%
int MAX_SIZE=102400*102400;//定义上传文件的最大字节
String rootPath;//创建根路径的保存变量
DataInputStream in=null;//声明文件读入类
FileOutputStream fileOut=null;
String remoteAddr=request.getRemoteAddr();//取得客户端的网络地址
String serverName=request.getServerName();//获得服务器的名字
out.print("serverName="+serverName+"<br>");
out.print("request.getServletPath()="+request.getServletPath()+"<br>");//取得jsp文件相当于根地址的地址
String realPath=request.getRealPath(serverName);//取得互联网程序的绝对地址
out.println("request.getRealPath(serverName))="+realPath+"<br>");
realPath=realPath.substring(0, realPath.lastIndexOf("\\"));
out.print("realPath="+realPath+"<br>");
rootPath=realPath+"\\upload\\";//创建文件的保存目录
out.println("文件的保存目录="+rootPath);
String contentType=request.getContentType();//取得客户端上传的数据类型
out.println("<p>客户端上传的数据类型="+contentType+"</p>");
try{
if(contentType.indexOf("multipart/form-data")>=0){
in=new DataInputStream(request.getInputStream());//读入上传的数据
int formDataLength=request.getContentLength();
if(formDataLength>MAX_SIZE){
out.println("<p>上传的文件字节数不可以超过"+MAX_SIZE+"</p>");
return;
}
byte dataBytes[]=new byte[formDataLength];//保存上传文件的数据
int byteRead=0;
int totalBytesRead=0;
while(totalBytesRead<formDataLength){//上传的数据保存在byte数组
byteRead=in.read(dataBytes,totalBytesRead,formDataLength);
totalBytesRead+=byteRead;
}
String file=new String(dataBytes);//根据byte数组创建字符串
String saveFile=file.substring(file.indexOf("filename=\"")+10);//取得上传数绝的文件名
saveFile=saveFile.substring(0,saveFile.indexOf("\n"));
saveFile=saveFile.substring(saveFile.indexOf("\\")+1,saveFile.indexOf("\""));
int lastIndex=contentType.lastIndexOf("=");
String boundary=contentType.substring(lastIndex+1,contentType.length());//取得数据的分隔字符串
String fileName=rootPath+saveFile;
int pos;
pos=file.indexOf("filename=\"");
pos=file.indexOf("\n", pos)+1;
pos=file.indexOf("\n", pos)+1;
pos=file.indexOf("\n", pos)+1;
int boundaryLocation=file.indexOf(boundary, pos)-4;
//out.println(boundaryLocation);
int startPos=((file.substring(0,pos)).getBytes()).length;//取得文件数据的开始位置
//out.println(startpos);
int endPos=((file.substring(0,boundaryLocation)).getBytes()).length;//取得文件数据的结束位置
//out.println(endPos);
File checkFile=new File(fileName);//检查上传文件是否存在
if(checkFile.exists()){
out.println("<p>"+saveFile+"文件已经存在.</p>");
}
File fileDir=new File(rootPath);//检查上传文件的目录是否存在
if(!fileDir.exists()){
fileDir.mkdirs();
}
fileOut=new FileOutputStream(fileName);//创建文件的写出类
fileOut.write(dataBytes, startPos, (endPos-startPos));//保存文件的数据
fileOut.close();
out.println("<p><font color=red size=7>"+saveFile+"文件成功上传.</font></p>");
}else{
String content=request.getContentType();
out.println("<p>上传的数据类型不是multipart/form-data</p>");
}
}
catch(Exception ex){
throw new ServletException(ex.getMessage());
}
%>
</body>
</html>

解决方案 »

  1.   

    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: D:\Tomcat 5.5\webapps\ROOT\upload\Documents and Settings\焦玉笙\桌面\相册照片\zhangxinzhou.jpg (系统找不到指定的路径。)
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause javax.servlet.ServletException: D:\Tomcat 5.5\webapps\ROOT\upload\Documents and Settings\焦玉笙\桌面\相册照片\zhangxinzhou.jpg (系统找不到指定的路径。)
    org.apache.jsp.photo.File_005f14_jsp._jspService(File_005f14_jsp.java:124)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    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.
    --------------------------------------------------------------------------------Apache Tomcat/5.5.17
      

  2.   

    是没有这个路径在上传文件之前
    你先 new File的形式来判断一下有没有这个路径,如果没有的话,你就Dir一下。然后再上传文件。
      

  3.   

    rootPath指定到 D:\Tomcat 5.5\webapps\ROOT\upload\Documents and Settings\焦玉笙\桌面\相册照片\
      

  4.   

    D:\Tomcat 5.5\webapps\ROOT\upload\Documents and Settings\焦玉笙\桌面\相册照片\zhangxinzhou.jpg这个路径对吗?
    你用的是什么操作系统?不同操作系统路径分割符不一样。
      

  5.   

    我是XP系统,在上传提取文件时,久自动加上D:\Tomcat 5.5\webapps\ROOT\upload这个路径!也不知道什么是怎么回事
      

  6.   


    大概看了一下代码,文件路径找不到String fileName=rootPath+saveFile; 
    rootPath=D:\Tomcat 5.5\webapps\ROOT\upload\
    saveFile=Documents and Settings\焦玉笙\桌面\相册照片\zhangxinzhou.jpgfileName路径错误
    大概你是文件路径解析时出错了建议你把
    File checkFile=new File(fileName);//检查上传文件是否存在
    if(checkFile.exists()){
    out.println(" <p>"+saveFile+"文件已经存在. </p>");
    }
    File fileDir=new File(rootPath);//检查上传文件的目录是否存在
    if(!fileDir.exists()){
    fileDir.mkdirs();
    }
    fileOut=new FileOutputStream(fileName);//创建文件的写出类
    fileOut.write(dataBytes, startPos, (endPos-startPos));//保存文件的数据
    fileOut.close();
    out.println(" <p> <font color=red size=7>"+saveFile+"文件成功上传. </font> </p>");
    }else{
    String content=request.getContentType();
    out.println(" <p>上传的数据类型不是multipart/form-data </p>");

    代码注掉,看看你OUT出来的数据来调试
    另外你这样写代码很不规范,尽量把JAVA代码写在业务层中
      

  7.   

    自己写上传还是比较可怕的推荐使用commons-fileupload可以省去这些麻烦。http://www.family168.com/tutorial/jsp/html/jsp-ch-11.html
      

  8.   

    第一 路径名不要用中文和空格,特别不能用桌面的,大忌
    第二 saveFile=Documents and Settings\焦玉笙\桌面\相册照片\zhangxinzhou.jpg 
        要么写成saveFile=Documents and Settings/焦玉笙/桌面/相册照片/zhangxinzhou.jpg 
              或saveFile=Documents and Settings\\焦玉笙\\桌面\\相册照片\\zhangxinzhou.jpg \在java里要用转义字符