Servlet实现文件下载

sss

在页面插入如标签

<a href="Download?path=2.txt">下载</a>

新建名为Download的servlet

package com.cgyue;



import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.PrintWriter;



import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class Download extends HttpServlet {



    /**

     * The doGet method of the servlet. <br>

     *

     * This method is called when a form has its tag value method equals to get.

     * 

     * @param request the request send by the client to the server

     * @param response the response send by the server to the client

     * @throws ServletException if an error occurred

     * @throws IOException if an error occurred

     */

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        //服务器相对路径

        String path= request.getParameter("path");

        //服务器绝对路径(下载文件存放的目录)

        path = this.getServletContext().getRealPath("/")+"sourceFile"+File.separator+path;

        //检查文件是否存在

        File file = new File(path);

        if(!file.exists()){

            response.setContentType("text/html;charset=utf-8");

            response.getWriter().println("指定文件不存在");

            return;

        }



        String fileName = path.substring(path.lastIndexOf("\\"));

        //写流文件到前端浏览器

        ServletOutputStream sos = response.getOutputStream();

        response.setHeader("Content-disposition", "attachment;filename="+fileName);

        BufferedInputStream bis = null;

        BufferedOutputStream bos = null;

        try{

            bis = new BufferedInputStream(new FileInputStream(path));

            bos = new BufferedOutputStream(sos);

            byte[] buff = new byte[2048];

            int bytesRead;

            while(-1 != (bytesRead = bis.read(buff,0,buff.length))){

                bos.write(buff, 0, bytesRead);

            }

        }catch(IOException e){

            throw e;

        }finally{

            if(bis != null){

                bis.close();

            }

            if(bos != null){

                bos.close();

            }

        }

    }



    /**

     * The doPost method of the servlet. <br>

     *

     * This method is called when a form has its tag value method equals to post.

     * 

     * @param request the request send by the client to the server

     * @param response the response send by the server to the client

     * @throws ServletException if an error occurred

     * @throws IOException if an error occurred

     */

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {



        this.doGet(request, response);

    }



}

 

你可能感兴趣的:(servlet)