Web网页文件下载

Web网页文件下载_第1张图片

 

 通过超链接提供下载的缺点:

在点击页面上的超链接的时候,只有2.rar和4.ppt 连接会弹出下载提示。

而其他的连接都会直接在 浏览器中打开需要下载的文件。

由于1.jpg 、1.txt文件是浏览器可以直接识别的并且能够显示的数据,这时浏览器直接把这些数据打开显示了 。而zip压缩文件浏览器并不支持直接在页面上浏览,因此才会提示下载。

 

JAVA代码

JavaEE中只需要书写Servlet程序,在Servlet程序中,通过IO流把需要用户下载的文件以流的方式放给客户端,并且通过Response告诉客户端这些数据不能直接打开,需要下载。




    
    Title


    

通过java代码对外提供下载

1.jpg 2.rar 3.txt 4.ppt

通过超链接对外提供下载

1.jpg 2.rar 3.txt 4.ppt
public class TestStream extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取文件名
        String filename = request.getParameter("filename");
        //两头 告诉浏览器文件的类型
        response.setContentType(this.getServletContext().getMimeType(filename));
        //告诉浏览器文件名 获取浏览器类型
        String agent = request.getHeader("User-Agent");
        String encodeFilename="";
        if(agent.contains("MSIE")){
            //IE
            encodeFilename= URLEncoder.encode(filename,"utf-8");
            encodeFilename=filename.replace("+"," ");
        }else if(agent.contains("Firefox")){
            //火狐
            BASE64Encoder base64Encoder=new BASE64Encoder();
            encodeFilename="=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8"))+"?=";
        }else{
            //其他
            encodeFilename= URLEncoder.encode(filename,"utf-8");
        }

        response.setHeader("content-disposition","attachment;filename="+encodeFilename);

        //两流
        FileInputStream in = new FileInputStream(this.getServletContext().getRealPath("/resource/" + filename));
        OutputStream os = response.getOutputStream();
        int b;
        while((b=in.read())!=-1){
            os.write(b);
        }
        in.close();

    }
}

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java)