文件上传和文件下载

文件上传:

1.首先,设计前台页面。

要在form表单中加上 enctype="multipart/form-data",指明接收请求的Servlet。

<form action="upload" method="post" enctype="multipart/form-data" >
  <span>上传文件</span><input type="file" name="filename" value="上传">
</form>

2.开发后台的Servlet。

2.1 在上传文件的Servlet上打注解:@MultipartConfig
2.2. 获取前台页面选择的文件名。

原理分析:在firebug上看到的文件上传的请求头为:

Content-Type: multipart/form-data; boundary=---------------------------16593218025140
Content-Length: 34211

-----------------------------16593218025140
Content-Disposition: form-data; name="fname"; filename="session (1).png"
Content-Type: image/png

每个文件都是一个Part,以前台的name属性标记,filename="session (1).png"为上传的文件名。

取出文件名:

request.setCharacterEncoding("utf-8");
Part part = request.getPart("filename");
        //获得上传的文件名
        String header = part.getHeader("Content-Disposition");
        int start = header.lastIndexOf("=");
        int end=header.lastIndexOf("\"");
        String fname= header.substring(start+2, end);
        System.out.println(fname);

如果上传多个文件,Collection<Part> parts = request.getParts(); 遍历parts,依次获取文件名。

2.3 将上传的文件存放在指定的路径下。

String path=request.getRealPath("/");//获取部署到tomcat下的文件路径
         System.out.println(path);
         String filename=path+fname;
         part.write(filename);

文件下载:

1.设置响应的文件类型

response.setContentType("application/octet-stream");

2.Response设置响应头Content-Dispostion,指定要下载的文件和下载方式。

response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

attachment:表示文件输出流会以附件的方式下载

3.读文件到输入流,写到response对象的输出流中,将数据刷新到磁盘

InputStream in=new FileInputStream(request.getRealPath("/")+fname);
        ServletOutputStream out = response.getOutputStream();
        byte[] b=new byte[1024];
        int len=0;
        while((len=in.read(b))!=-1){
            out.write(b,0,len);
        }
        //将数据刷新到磁盘
        out.flush();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值