jsp+servlet用底层代码实现文件上传下载

实现文件上传的实现思路:

1.配置web.xml创建UploadServlet

2.Form的method设置为post;enctype配置为multipart/form-data

3.保存上传文件


文件上传后台实现步骤:

1.获取request当中的流信息,保存到临时文件

2.从临时文件当中得到长传的文件名,及文件内容的起止位置

3.根据文件的起止位置,读取上传文件的内容保存到本地


1.代码:

//从request当中获取流信息

InputStream fileSource = req.getInputStream();

String tempFileName = "E:/tempFile";

//tempFile指向临时文件

File tempFile = new File(tempFileName);

//outputStream文件输出流指向这个临时文件

FileOutputStream outputStream = new FileOutputStream(tempFile);

byte b[] = new byte[1024];

int n;

while((n=fileSource.read(b))!=-1){

 outputStream.write(b,0,n);

}

//关闭输出流,输入流

outputStream.close();

fileSource.close();


2.代码:


//获取文件的名称

RandomAccessFile randomFile =  new RandomAccessFile(tempFile,"r");

randomFile.readLine();

String str = randomFile.readLine();

int beginIndex = str.lastIndexOf("\\")+1;//第二行最后一个反斜杠加1的位置;

int endIndex = str.lastIndexOf("\"");

String filename = str.substring(beginIndex,endIndex);

System.out.println("filename:"+filename);


//重新定位文件指针到文件头

randomFile.seek(0);

long startPosition = 0;

int i = 1;

//获取文件内容的开始位置

//开始为位置为第4个换行符之后的那个位置

while((n=randomFile.readByte())!=-1&&i<=4){

 

if(n=='\n')

{

startPosition = randomFile.getFilePointer();

i++;

}

startPosition = startPosition - 1;

}

//获取文件内容结束位置

randomFile.seek(randomFile.length());

long endPosition = randomFile.getFilePointer();

int j=1;

while(endPosition>=0&&j<=2){

endPosition--;

randomFile.seek(endPosition);

if(randomFile.readByte()=='\n'){

j++;

}

}

endPosition = endPosition - 1;


//设置保存上传文件的路径

String realPath = getServletContext().getRealPath("/")+"images";

File fileupload = new File(realPath);

if(!fileupload.exists()){

fileupload.mkdir();

}

File saveFile = new File(realPath,filename);

RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");

//从临时文件当中读取文件内容(根据起止位置获取)

randomFile.seek(startPosition);

while(startPosition<endPosition){

randomAccessFile.write(randomFile.readByte());

startPosition = randomFile.getFilePointer();

}

//关闭输出流,删除临时文件

randomAccessFile.close();

randomFile.close();

tempFile.delete();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值