• web文件下载(附方案及源码配置)


    1. 场景描述

    因项目需查询数据量比较大(需要查询Hbase等nosql数据库),采用用户点击查询后,后台查询并生成查询文件;然后消息通知用户后,用户点击下载的方式来满足用户需求。

    2. 解决方案

    Web容器用的Tomcat,拟采用tomcat提供文件下载功能。

    2.1 开启虚拟目录与路径映射(不建议)

    需修改tomcat下的web.xm和server.xml文件

    2.1.1 开启虚拟目录

    修改web.xml

    <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
    </init-param>
            
    -------------------修改为:-----------
    <init-param>
                <param-name>listings</param-name>
                <param-value>true</param-value>
    </init-param>
    
    2.1.2 开启路径映射

    修改server.xml

         <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true" deployOnStartup="true">
            <Context path="" docBase="laowang" debug="0" reloadable="true"/>
          </Host>
         
          ------------新加一个<Context>----------------
              <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true" deployOnStartup="true">
            <Context path="" docBase="laowang" debug="0" reloadable="true"/>
            <Context path="/test" docBase="/home/laowang/test" debug="0" 						privileged="true"></Context>
          </Host>
    

    其中:path中的 "/test"为请求访问路径;/home/laowang/test为文件存在服务器的实际路径。

    2.1.3 效果

    2.1.4 存在不足

    web中listings的 含义是Directory Listing(虚拟目录),默认false其实是处于安全考虑的,修改为true其实是不安全的,不建议的。

    2.2 将文件放置到ROOT下(不建议)

    2.2.1 说明

    直接将文件放置到目录:apache-tomcat-8.0.53/webapps/ROOT,因为tomcat本身提供的就是web服务,可以直接访问,不用修改任何东西。

    2.2.2 效果

    2.2.3 存在不足

    ROOT目录,重新打包的时候,文件会丢失的,只能用于临时文件还可以,与项目需求不符合。

    2.3 只开启路径映射及相关配置(建议)

    2.3.1 开启路径映射
     <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">
        <Context path="" docBase="laowang" debug="0" reloadable="true"/>
      </Host>
     
      ------------新加一个<Context>----------------
          <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">
        <Context path="" docBase="laowang" debug="0" reloadable="true"/>
        <Context path="/test" docBase="/home/laowang/test" debug="0" 						privileged="true"></Context>
      </Host>
    
    2.3.2 效果

    (1)因未开启虚拟路径服务,所以不能访问其他文件。

    (2)只有文件名称完全对的上,才能访问。

    2.3.3 存在问题及解决方案

    大家通过截图可能也发现了,文件是直接打开的,而并不是下载到本地,项目需求是要下载到本地打开的。

    有两个方式解决

    (1)第一个是在打开的文件右键-》另存为就可以下载,但是这样太不不方便。

    (2)结合前端html使用a标签,点击后直接下载。(推荐)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <a href="http://10.192.168.11:9108/test/test.txt" download="test.txt">download</a>
    </body>
    </html>
    

    效果图,点击后就直接下载到默认目录了。


  • 相关阅读:
    拟阵交
    HEOI2021退役记
    退役划水一
    上下界网络流学习笔记
    扩展卢卡斯学习笔记
    扩展中国剩余定理(EXCRT)学习笔记
    插头DP学习笔记
    如何优雅地生成仙人掌图
    Powerful Number 筛学习笔记
    边分治学习笔记
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/11182720.html
Copyright © 2020-2023  润新知