📄 upload1.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 + -