jsp+servlet实现文件上传问题,已经做到能上传成功了,但是上传的文件都不完整,比如.doc文件已损坏。。
servlet代码如下:try{//定义上传文件的最大字节intMAX_SIZE=30*1024*1024;//创建根路径的保存变量StringrootPath;//声明...
servlet代码如下:
try {
//定义上传文件的最大字节
int MAX_SIZE=30*1024*1024;
//创建根路径的保存变量
String rootPath;
//声明文件读入类
DataInputStream in=null;
FileOutputStream fileOut=null;
//取得客户端的网络地址
String remoteAddr=request.getRemoteAddr();
//获得服务器的名字
String serverName=request.getServerName();
//取得互联网程序的绝对地址
String realPath=request.getRealPath("/");
realPath=realPath.substring(0,realPath.lastIndexOf("\\"));
rootPath=realPath+"\\upload\\";
File fileDir=new File(rootPath);
//创建文件夹upload;
if(!fileDir.exists())
{
fileDir.mkdirs();
}
String contentType=request.getContentType();
if(contentType.indexOf("multipart/form-data")>=0)
{
//读入上传的数据
in =new DataInputStream(request.getInputStream());
int formDataLength=request.getContentLength();
if(formDataLength>MAX_SIZE)
{
out.println("上传的文件字节数不可超过"+MAX_SIZE);
return;
}
//用数组保存上传文件的数据
byte dataBytes[]=new byte[formDataLength];
int byteRead=0;
int totalBytesRead=0;
while(totalBytesRead<formDataLength)
{
//上传的数据保存在byte数组
byteRead=in.read(dataBytes,totalBytesRead,formDataLength);
totalBytesRead+=byteRead;
}
//根据byte数组创建字符串
String file=new String(dataBytes);
//取得上传数据的文件名
String saveFile=file.substring(file.indexOf("filename=\"")+10);
saveFile=saveFile.substring(0,saveFile.indexOf("\n"));
saveFile=saveFile.substring(saveFile.lastIndexOf("\\")+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;
//取得文件数据的开始的位置
int startPos=((file.substring(0,pos)).getBytes()).length;
//取得文件数据的结束的位置
int endPos=((file.substring(0,boundaryLocation)).getBytes()).length;
//检查上传文件是否存在
File checkFile=new File(fileName);
if(checkFile.exists())
{
out.println("文件已经存在");
}else{
//创建文件的写出类
fileOut=new FileOutputStream(fileName);
//保存文件的数据
fileOut.write(dataBytes,startPos,(endPos-startPos));
fileOut.close();
out.println("文件上传成功");
}
}
else
{
String content=request.getContentType();
out.println("上传的数据类型不是multipart/form-data");
}
} catch (Exception e) {
throw new ServletException(e.getMessage());
}
求大虾们帮帮忙,谢谢 展开
try {
//定义上传文件的最大字节
int MAX_SIZE=30*1024*1024;
//创建根路径的保存变量
String rootPath;
//声明文件读入类
DataInputStream in=null;
FileOutputStream fileOut=null;
//取得客户端的网络地址
String remoteAddr=request.getRemoteAddr();
//获得服务器的名字
String serverName=request.getServerName();
//取得互联网程序的绝对地址
String realPath=request.getRealPath("/");
realPath=realPath.substring(0,realPath.lastIndexOf("\\"));
rootPath=realPath+"\\upload\\";
File fileDir=new File(rootPath);
//创建文件夹upload;
if(!fileDir.exists())
{
fileDir.mkdirs();
}
String contentType=request.getContentType();
if(contentType.indexOf("multipart/form-data")>=0)
{
//读入上传的数据
in =new DataInputStream(request.getInputStream());
int formDataLength=request.getContentLength();
if(formDataLength>MAX_SIZE)
{
out.println("上传的文件字节数不可超过"+MAX_SIZE);
return;
}
//用数组保存上传文件的数据
byte dataBytes[]=new byte[formDataLength];
int byteRead=0;
int totalBytesRead=0;
while(totalBytesRead<formDataLength)
{
//上传的数据保存在byte数组
byteRead=in.read(dataBytes,totalBytesRead,formDataLength);
totalBytesRead+=byteRead;
}
//根据byte数组创建字符串
String file=new String(dataBytes);
//取得上传数据的文件名
String saveFile=file.substring(file.indexOf("filename=\"")+10);
saveFile=saveFile.substring(0,saveFile.indexOf("\n"));
saveFile=saveFile.substring(saveFile.lastIndexOf("\\")+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;
//取得文件数据的开始的位置
int startPos=((file.substring(0,pos)).getBytes()).length;
//取得文件数据的结束的位置
int endPos=((file.substring(0,boundaryLocation)).getBytes()).length;
//检查上传文件是否存在
File checkFile=new File(fileName);
if(checkFile.exists())
{
out.println("文件已经存在");
}else{
//创建文件的写出类
fileOut=new FileOutputStream(fileName);
//保存文件的数据
fileOut.write(dataBytes,startPos,(endPos-startPos));
fileOut.close();
out.println("文件上传成功");
}
}
else
{
String content=request.getContentType();
out.println("上传的数据类型不是multipart/form-data");
}
} catch (Exception e) {
throw new ServletException(e.getMessage());
}
求大虾们帮帮忙,谢谢 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询