⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uploadservlet.java

📁 JAVA邮件系统
💻 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 + -