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

📄 upload1.java

📁 JAVA邮件系统
💻 JAVA
字号:

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

//取得文件上载信息:
class Upload1
{
	ServletInputStream sis;
	byte[] bBoundary = new byte[100];
	byte[] bFileName = new byte[100];
	int nStart=0,nBoundaryLength,nBegin;
	int nBufferLength=2048;//Buffer大小
	int nCount;//记录文件大小
	String sFolder="c:"+File.separatorChar +"tmp"+File.separatorChar +"folder"+File.separatorChar +"",sFileName="test.txt";
	

	Upload1(ServletInputStream tmpSis)
	{
		sis=tmpSis;
	}
	
	Upload1(ServletInputStream tmpSis,int tmpBufferLength)
	{
		sis=tmpSis;
		if(tmpBufferLength>1024)
			nBufferLength=tmpBufferLength;
	}
	
	public void writeToFile()
	{
		//基本参数:
		int nSize=0,nPosition=0,nLength,nStart1=0,nEnd1=0,nStart2=0,nEnd2=0;
		byte[] b1=new byte[nBufferLength],b2=new byte[nBufferLength],bAll=new byte[2*nBufferLength];
		//头处理:
		try {
			nSize=sis.read(b1,0,nBufferLength);
		}catch(Exception ex) {
		}
		
		//取得基本参数;
		this.makeParameter(b1);
		
		
		//获得边界数组:
		byte[] bBoundary=this.getBeginBoundary();
		int nBoundaryLength=bBoundary.length;
		nStart1=nBegin;
		nEnd1=nSize;
		
		//上载的文件:
		try
		{
			FileOutputStream fos= new FileOutputStream(sFolder+sFileName);
		}catch(Exception ex){
		}
	
		//若文件小于Buffer长度:
  
		nCount=0;

		boolean flag=false;

		//循环:
		while(nSize!=-1) {

			//取得b2:
			try {
				nSize=sis.read(b2,0,nBufferLength);
			}catch(Exception ex) {
			}

			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 = this.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;
			}
		}
	//ServletInputStream中的数据已经取完了,b1中的数据写入文件:
	
		try
		{
		if(flag==false) {
			nPosition=this.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]);
			}
		}
		
		//fos.close();
		}catch(Exception ex){
		}
	}
	
	private void makeParameter(byte[] bName)
	{
		
	}
	
	public byte[] getBeginBoundary()
	{
		byte[] Btmp =new byte[100];
		return Btmp;
	}
	
		public int findInArray(byte[] Src,byte[] bDes,int nBeginSearch,int nEndSearch){
		if( Src==null || bDes == null )
			return -1;
		if( nBeginSearch+nEndSearch>Src.length )
			nEndSearch = Src.length -nBeginSearch;
		for(int i=nBeginSearch;i<nBeginSearch+nEndSearch;i++ ){
			if( Src[i]==bDes[0] ){
				boolean same = true;
				for( int j=0;j<bDes.length ;j++ ){
					if(i+j>=Src.length)
						return -1;
					if( Src[i+j] != bDes[j] ){
						same = false;
						break;
					}
				}
				if( same)
					return i; 
			}
		}
		return -1;
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -