zoukankan      html  css  js  c++  java
  • 19. JSP

    文件下载

    超链接下载
    超链接下载是指,将下载资源作为超链接的链接目的文件出现。若浏览器可以解析该资源文件,则将在浏览器上直接显示文件内容;若浏览器不支持该文件的解析,则会弹出另存为对话框,要求用户保存

    在Web文件夹下创建download文件夹,里面放入一些文件。

    创建html:

     html这样写:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <a href="dowload/bihu.png">下载图片</a>    <!-- 浏览器可以解析的直接打开 -->
        <a href="dowload/bihu.exe">下载bihu社区</a>
    </body>
    </html>

    ---------------------------------------------------------

    jsp这样写:【加个斜杠】

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <a href="${ pageContext.request.contextPath }/dowload/bihu.png">下载图片</a>    <!-- 浏览器可以解析的直接打开 -->
        <a href="${ pageContext.request.contextPath }/dowload/bihu.exe">下载bihu社区</a>
    </body>
    </html>

    文件路径自己配 你完全也可以用方法 获取文件路径。

    目录不要放在eclipse服务器的文件哪里,最好就放在WebContext 文件夹下【和jsp/html 一个目录】,因为每次部署Tomcat时候 会重新部署 那你文件就没了。【意思是叫你下载的文件放在webContext下,或其他,【具体服务器我不知道 反正Eclipse是这样的】】


    其实还是那句话: 搞清楚文件路径 实在不行用方法去打印出来查看!

    这种方式适用于那种很直接的下载,有点内个了,我们用Servlet进行下载:

     先来个JSP:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <a href="${ pageContext.request.contextPath }/dowload">下载bihu.png【Servlet附件下载】</a>
    </body>
    </html>

    Servlet:

    package dowload;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    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 dowload extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //设置一下编码 防止各方面的乱码【这里推荐在过滤器写】
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
            
            //设置响应头属性【和浏览器说 这是已文件的形式下载!】
            //注意这个格式别写错了  照着拷贝就好了:
            //response.setHeader("content-disposition", "attachment;filename=文件名字");
            
            /*
             *     中文的文件名乱码!! 用new String() 解决!!!! 添加头没用的!:
             * */
            String FileName = "壁虎本人图片.png";
            FileName = new String(FileName.getBytes("UTF-8"),"iso8859-1");                    //利用new String 转换编码!!! 很重要!
            response.setHeader("content-disposition", "attachment;filename=" + FileName);
            
            //获取输入流【在服务器本目录下获取】
            //getResourcePaths:获取WebContent中的文件路径
            InputStream is =  this.getServletContext().getResourceAsStream("/dowload/bihu.png");
            //获取输出流
            ServletOutputStream out = response.getOutputStream();
            
            //传递文件出去
            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = is.read(bytes)) != -1) {
                //直接写出去即可!
                out.write(bytes,0,len);
            }
            
            
            
        }
    
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
    }

    解决文件名乱码详解:

    用内个什么设置头编码没用的【那个对上传文件的文件名乱码就有用】  因为文件名不是哪里传过来的 我们是往外传 所以:

    只需将文件名设置编码即可:

    String fileName = "壁虎小时候的照片.png";
    fileName = new String(fileName.getBytes("utf-8"),"iso8859-1");
    //设置响应头属性值,使文件以附件形式进行下载
    response.setHeader("content-disposition", "attachment;filename="+fileName);

    完.

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14874233.html

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14874233.html
Copyright © 2011-2022 走看看