<%@ 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>
<%@ 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>
解决方案 »
- MyEclipse Package Explorer没有项目显示是怎么回事
- el 表达式转义
- 求助希望各位老大帮下我Unable to compile class for JSP
- 没人理,重新发贴,jasper调用的出错,还是100分,高手们帮帮忙吧
- 请问Java中有没有类似PHP的var_dump()方法?
- structs 中是不是通过配置struts-config来控制JSP第一次显示做的处理
- java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with
- 谁会此问题?小弟跪求拜为师!
- jsp 连 如何连 sql server 7 ? 在线等待,马上给分
- synchronized 学习(一)
- 连接数据库相 对路径
- NullPointerException问题
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
你先 new File的形式来判断一下有没有这个路径,如果没有的话,你就Dir一下。然后再上传文件。
你用的是什么操作系统?不同操作系统路径分割符不一样。
大概看了一下代码,文件路径找不到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代码写在业务层中
第二 saveFile=Documents and Settings\焦玉笙\桌面\相册照片\zhangxinzhou.jpg
要么写成saveFile=Documents and Settings/焦玉笙/桌面/相册照片/zhangxinzhou.jpg
或saveFile=Documents and Settings\\焦玉笙\\桌面\\相册照片\\zhangxinzhou.jpg \在java里要用转义字符