java文件字符流分割法上传和下载

java文件上传和下载
方法:
1.使用第三方jar包(Spring组件,commons包等)
2.单文件采用接收request流,字符分割
3.熟悉HTTP协议,通过协议项获取内容

这里采用第二种方式:
文件上传原理:
通过表单元素设置<input type="file">:
     注: action中Method="post" enctype="multipart/form-data"属性;
            必须要设置input输入项的name属性,否则浏览器不会发送上传文件的数据
            让表单提交的数据以二进制编码的方式提交,(用MIME协议对上传的文件进行描述)
            在接收此请求的servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。
用字符串方式解析Http流:
JSP:
<body>
    <form action="upLoadServlet" method="post" enctype="multipart/form-data">
              请选择图片:<input id="myfile" name="myfile" type="file"/>
      <input type="submit" value="提交"/>
  </form>
</body>

upLoadServlert:
     
package  jrh.sc.ser;

import  java.io.File;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.RandomAccessFile;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class upLoadServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//从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=0;
while((n=fileSource.read(b))!=-1){
System.out.println(new String(b,0,n));
outputStream.write(b, 0, n);
}
//关闭输出输入流
     outputStream.close();
fileSource.close();

//获取上传文件的名称
RandomAccessFile randomFile=new RandomAccessFile(tempFile,"r");
randomFile.readLine();
String str=randomFile.readLine();
int beginIndex=str.lastIndexOf("\\")+1;
int endIndex=str.lastIndexOf("\"");
String fileName=str.substring(beginIndex,endIndex);
System.out.println(fileName);

//重新定位文件指针获取文件开始位置
randomFile.seek(0);
long startPosition=0;
int i=1;
while((n=randomFile.readByte())!=-1&& i<=4){
if(n=='\n'){
//startPosition=randomFile.getFilePointer();
i++;
}
}
startPosition=randomFile.getFilePointer()-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=randomFile.getFilePointer()-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");
//读取文件内容
FileOutputStream outputStream1=new FileOutputStream("e:\\"+fileName);
randomFile.seek(startPosition);
while(startPosition<endPosition){
//存放在某个磁盘下
//outputStream1.write(randomFile.readByte());
//存放在服务器端的某个路径下
randomAccessFile.writeByte(randomFile.readByte());
startPosition=randomFile.getFilePointer();
}
//关闭流,并删除临时文件
randomFile.close();
tempFile.delete();
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值