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

  • 相关阅读:
    0121 集合类 ArrayList 的练习
    0121 有关接口的使用练习
    泛型相关知识
    0120 父类与子类创建、重写及转型练习
    0118练习 单例模式
    java设计模式 略版
    0117 面向对象OOP有关方法、类、构造方法及权限修饰符的练习
    0115 创建类并调用
    [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
    POJ1284 Primitive Roots (原根)
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14874233.html
Copyright © 2011-2022 走看看