📄 uploadservlet.java
字号:
//上载文件读取,并算出文件大小:
/*
*
*/
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
*
*
* @author Liyan
*/
public class UploadServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
HtmlOut htmlOut = new HtmlOut (response);
Person p=new Person();
p.setName (CommonMethods.GetUserName(request));
String pass = CommonMethods.GetUserPass (request);
if( p.getName ()==null || (!p.checkPassword(pass)) )
{
htmlOut.setErrorID (htmlOut.SHOW_SIMPLE_MESSAGE ,"",
"user name or password not correct","/");
htmlOut.outHtml();
return;
}
int nBufferLength=2048;
//用户可以使用的最大磁盘空间:
long MAX_LENGTH = 10240000;
byte[] b1=new byte[nBufferLength],b2=new byte[nBufferLength],bAll=new byte[2*nBufferLength];
//基本参数:
int nSize=0,nPosition=0,nLength,nStart1=0,nEnd1=0,nStart2=0,nEnd2=0;
int nCount;//记录文件大小
ServletInputStream sis = request.getInputStream();
//头处理:
try {
nSize=sis.read(b1,0,nBufferLength);
}catch(Exception ex) {
}
//对b1处理,获得上载后的存放路径、文件名和文件正文在b1中的位置
Upload upload = new Upload(b1);
String sBaseDir=CommonMethods.GetUserFolderdir();
sBaseDir+=p.getName();
String sFolder=sBaseDir+upload.getFilePath().trim();
String sFileName=upload.getFileName().trim();
//获得边界数组:
byte[] bBoundary=upload.getBoundary();
int nBoundaryLength=bBoundary.length;
nStart1=upload.getStartPlace();
nEnd1=nSize;
//对b1的处理完成。
//上载的文件:
String sUploadFile = sFolder+""+File.separatorChar +""+sFileName;
FileOutputStream fos = new FileOutputStream(sUploadFile);
//若文件小于Buffer长度:
nCount=0;
boolean flag=false;
//循环:
while(nSize!=-1) {
//out.println("nEnd1: "+nEnd1+" nStart1: "+nStart1+" nPosition: "+nPosition+" nSize: "+nSize+"<br>");
//取得b2:
try {
nSize=sis.read(b2,0,nBufferLength);
}catch(Exception ex) {
fos.close();
break;
}
if(nSize==-1) {
flag=false;
break;
}
flag=true;
//对b2的处理:
nStart2=0;
nEnd2=nSize;
//把b1,b2的值付给bAll:
int nArrayLength=nEnd1-nStart1;
try
{
for(int i=0;i<nArrayLength;i++)
bAll[i]=b1[nStart1+i];
for(int i=nArrayLength;i<nArrayLength+nEnd2-nStart2;i++)
bAll[i]=b2[nStart2+i-nArrayLength];
}catch(Exception ex) {
}
try {
nPosition = upload.findInArray(bAll,bBoundary,0,nArrayLength+nEnd2-nStart2);
}catch(Exception ex) {
}
if(nPosition==-1) {
//若未找到结束边界,应把b1写入文件。
for(int i=nStart1;i<nEnd1;i++)
fos.write(b1[i]);
nCount=nCount+nArrayLength;
//把b2的参数传给b1:
nStart1=nStart2;
nEnd1=nEnd2;
for(int i=nStart1;i<nEnd1;i++)
b1[i]=b2[i];
}else {
//若找到边界:
//bAll写入文件:
for(int i=0;i<nPosition;i++)
fos.write(bAll[i]);
nCount=nCount+nPosition;
flag=true;
break;
}
}
//out.println("nEnd1:"+nEnd1+"nStart1:"+nStart1+"nPosition"+nPosition+"sBoundary's length:"+sBoundary.length());
//ServletInputStream中的数据已经取完了,b1中的数据写入文件:
if(flag==false) {
nPosition=upload.findInArray(b1,bBoundary,0,nEnd1);
if(nPosition!=-1) {
nCount=nPosition-nStart1;
for(int i=nStart1;i<nPosition;i++)
fos.write(b1[i]);
}else {
nCount=nCount+nEnd1-nStart1;
for(int i=nStart1;i<nEnd1;i++)
fos.write(b1[i]);
}
}
//for(int i=0;i<nBoundaryLength;i++)
// fos.write(bBoundary[i]);
fos.close();
//htmlOut.addString("上载成功!<br>");
//htmlOut.addString("文件名称:"+sFileName+"<br>");
//htmlOut.addString("文件大小:"+nCount+"字节<br>");
//htmlOut.addString("<br><a href='FolderServlet?into="+upload.getFilePath().trim()+"'>返回</a>");
//response.sendRedirect("FolderServlet?into="+upload.getFilePath().trim());
//检查用户占用的空间:
if(Folder.getFileLength(sBaseDir)>MAX_LENGTH){
File del = new File(sUploadFile);
del.delete();
}
//用Jscript代替sendRedirect
String sTmp="";
sTmp+="<script language=\"Javascript\">";
sTmp+="location='FolderServlet?into="+this.makeStr(upload.getFilePath().trim())+"';";
sTmp+="</script>";
htmlOut.addString(sTmp);
htmlOut.outHtml();
}
public String makeStr(String sTmp){
int nB=0,nE=sTmp.indexOf(""+File.separatorChar +"");
String sOk="";
while(nE!=-1){
sOk+=sTmp.substring(nB,nE+1)+""+File.separatorChar +"";
nB=nE+1;
nE=sTmp.indexOf(""+File.separatorChar +"",nB);
}
sOk+=sTmp.substring(nB,sTmp.length());
return sOk;
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doGet(request,response);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -