Web网页文件下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QuietHRH/article/details/81812581

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

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

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

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

 

JAVA代码

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>通过java代码对外提供下载</h1>
    <a href="/servlet/testStream?filename=1.jpg">1.jpg</a>
    <a href="/servlet/testStream?filename=2.rar">2.rar</a>
    <a href="/servlet/testStream?filename=3.txt">3.txt</a>
    <a href="/servlet/testStream?filename=4.ppt">4.ppt</a>

    <br/>
    <h1>通过超链接对外提供下载</h1>
    <a href="/servlet/resource/1.jpg">1.jpg</a>
    <a href="/servlet/resource/2.rar">2.rar</a>
    <a href="/servlet/resource/3.txt">3.txt</a>
    <a href="/servlet/resource/4.ppt">4.ppt</a>
</body>
</html>
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();

    }
}
扫描二维码关注公众号,回复: 3232430 查看本文章

猜你喜欢

转载自blog.csdn.net/QuietHRH/article/details/81812581