zoukankan      html  css  js  c++  java
  • JavaWeb文件下载!

    一、文件下载分为两种:

    第一种为:servlet;

    第二种为:a 标签;

    二、Servlet下载(例:文本、图片):附:源码,源码图,目录图!

    源码:

    servlet代码:

    package com.laugh;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URLEncoder;
    
    public class fileservlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置显示格式(用于在线查看显示的)
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html");
    
            //第一步:获取文件的路径;
            String url = this.getServletContext().getRealPath("/WEB-INF/classes/debug.txt");
            //String url = "D:\\JAVA_Bao\\TomCat\\apache-tomcat-9.0.54\\webapps\\FileOutputStream_war\\WEB-INF\\classes\\whyy.png";
            System.out.println("获取的文件路径为:" + url);
    
            //第二步:获取文件称
            String FileName = url.substring(url.lastIndexOf("\\") + 1);
            System.out.println("获取的文件名称为:" + FileName);
    
            //第三步:设置头部信息,让浏览器能支持下载, Content-Disposition / attachment;filename 这个照抄就行,不用管
            //中文情况下用我
            resp.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(FileName,"UTF-8"));
            //resp.setHeader("Content-Disposition","attachment:filename=" + FileName);
    
            //第四步:获取文件输入流
            FileInputStream FileInputStream = new FileInputStream(url);
    
            //第五步:定义一个缓冲区
            byte[] Buffer = new byte[1024];
            int length = 0;
    
            //第六步:获取OutputStream对象
            ServletOutputStream FileoutputStream = resp.getOutputStream();
    
            //第七步:将文件流写入缓冲区,将缓冲区的输出到客户端
            while((length = FileInputStream.read(Buffer)) != -1){
                FileoutputStream.write(Buffer,0,length);
            }
    
            //第八步:关闭流
            FileInputStream.close();
            FileoutputStream.close();
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }

    web.xml代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        <servlet>
            <servlet-name>file</servlet-name>
            <servlet-class>com.laugh.fileservlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>file</servlet-name>
            <url-pattern>/down</url-pattern>
        </servlet-mapping>
    
    
    </web-app>

    源码图:

    资源文件/目录结构:

    执行结果:

    servlet补充:如何实现文件在线预览

    方法:把我代码上面写的第三步,注释的东西去掉,注释那个没有注释的就好了:

    //第三步:设置头部信息,让浏览器能支持下载, Content-Disposition / attachment;filename 这个照抄就行,不用管
    //中文情况下用我
    //resp.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(FileName,"UTF-8"));
    resp.setHeader("Content-Disposition","attachment:filename=" + FileName);

    两段代码的不一样之处:(偷奸耍滑专用招)

    第一个实现直接下载,他的“attachment filename”中间的是“;”这个符号。

    第二个实现在线预览,他的“attachment : filename”中间的是“:”这个符号。

    二、a标签下载:

    代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
            <h2>I was downloading the page: </h2>
    
            I'm a text download: <a href="DownFile/debug.txt" download="DownFile/debug.txt" >debug.txt</a></br>
            I am a picture JPG download: <a href="DownFile/why.jpg" download="DownFile/why.jpg">why.jpg</a></br>
            I am picture PNG download: <a href="DownFile/whyy.png" download="DownFile/whyy.png">whyy.png</a></br>
        </body>
    </html>

    效果图:

    生在内卷,你卷我也卷。 愿与诸君共勉!
  • 相关阅读:
    用Xamarin + VS 编写Android程序体验及其与Android Studio的比较
    【Android】XML文件的解析
    【Ubuntu】您没有查看“sf_VirtualDisk”的内容所需的权限。
    Android酷炫实用的开源框架(UI框架)
    Linux下安装gcc 、g++ 、gfortran编译器
    Ubuntu 分辨率调整及操作问题解决
    “this kernel requires an x86-64 CPU, but only detects an i686 CPU, unable to boot” 问题解决
    【Android】沉浸式状态栏实现
    【Android】基于TCP协议的网络通信
    C#中string和byte[]相互转换问题解决
  • 原文地址:https://www.cnblogs.com/superyonng/p/15619540.html
Copyright © 2011-2022 走看看