• Http实现文件下载


    HttpServlet实现下载文件,重要的设置header,否则浏览器无法解析为下载。

    Header示例:

    1:response.setContentType("application/pdf");//说明实体主体内容的媒体类型

    2:response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));//文件解析为下载还是内嵌显示

    3:response.setHeader("Content-Length", String.valueOf(length)); //表示实体主体部分的大小

    如下示例:

    package com.daxin;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class DownLoadFile
     */
    public class DownLoadFile extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#HttpServlet()
         */
        public DownLoadFile() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            File file = new File("C:\Coding\servlet_fie_upload\aa.flv");
            if (file.exists()) {
                FileInputStream in = new FileInputStream(file);
                // 1:设置http header信息为pdf解析方式
                // response.setContentType("application/pdf");
    
                // 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
                 response.setContentType("multipart/form-data"); //相对比较通用
    
                response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
                response.setHeader("Content-Length", String.valueOf(in.available()));
                // 2:
                BufferedInputStream br = null;
                BufferedOutputStream bw = null;
                try {
                    br = new BufferedInputStream(in);
                    bw = new BufferedOutputStream(response.getOutputStream());
                    byte[] buffer = new byte[1024];
                    int bufferSize = 0;
                    while (-1 != (bufferSize = br.read(buffer))) {
                        bw.write(buffer, 0, bufferSize);
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (bw != null)
                        bw.close();
                    if (in != null)
                        in.close();
                    if (br != null)
                        br.close();
                }
    
            }
    
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    1: Web开发中下载文件时,我们一般设置Content-Disposition告诉浏览器下载文件的名称,是否在浏览器中内嵌显示. Content-disposition: inline; filename=foobar.pdf表示浏览器内嵌显示一个文件

    2:Content-disposition: attachment; filename=foobar.pdf表示会下载文件

    前端页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
    
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <base href="<%=basePath%>">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="DownLoadFile">下载文件</a>
    </body>
    </html>
  • 相关阅读:
    python爬取二手房库存,存数据库,生成折线图(下)
    python爬取二手房库存,存数数据库,生成折线图(上)
    python爬取二手房库存,存数据库,生成折线图(中)
    vue input 复制后无法修改
    js对象应用问题
    redis5.0集群搭建
    查看java 字节码的方式
    python 运行js
    对java基本对象的构想
    学习第39天
  • 原文地址:https://www.cnblogs.com/leodaxin/p/7510563.html
Copyright © 2020-2023  润新知