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>

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


web文件下载(附方案及源码配置)的更多相关文章

  1. Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

    Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

  2. HTML与CSS入门经典(第9版)试读 附随书源码 pdf扫描版​

    HTML与CSS入门经典(第9版)是经典畅销图书<HTML与CSS入门经典>的最新版本,与过去的版本相同,本书采用直观.循序渐进的方法,为读者讲解使用HTML5与CSS3设计.创建并维护世 ...

  3. WEB前端开发学习:源码canvas 雪

    WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> ...

  4. [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护) 标签: .net加密产品c#dll工具 2011-03-24 21:06 27009人阅读 评论(13) 收藏 举报 分类: C ...

  5. NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)

    NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)       七月,酷暑难耐,认识的几位同学参加知乎看山杯,均取得不错的排名.当时天池AI医疗大赛初赛结束,官方正在为复赛进行平台调 ...

  6. web框架前言与学生数据库系统(附1.0源码)

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def f1(request): ""&quo ...

  7. 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM

    项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...

  8. Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码

    Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...

  9. 移动web app开发必备 - Deferred 源码分析

    姊妹篇  移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...

随机推荐

  1. XE Delphi 判断字符为中文的方法

    在uses中添加System.AnsiStrings /// Param ch--字符串/// Param cno--字符位置 function IsZHChar(const ch: AnsiStri ...

  2. 用JavaScriptSerializer解析JSON

    引用System.Web.Extensions using System.Web.Script.Serialization; var serializer = new JavaScriptSerial ...

  3. Advanced Installer 安装前卸载旧版本的办法

    原文:Advanced Installer 安装前卸载旧版本的办法 Advanced Installer这个工具百度出来的资料太少了. 在我们平常打包的工作中,经常遇到的一个问题是,如何能在安装新版本 ...

  4. mysq练习(二)

    Mysql练习(二) 1. delete,drop,truncate 的区别? 可以参考这位的:  https://www.cnblogs.com/zhizhao/p/7825469.html 2. ...

  5. MIPS开发板的“不二”选择——Creator Ci20单板计算机评测(芯片是君正JZ4780 ,也就是MIPS R3000,系统推荐Debian或深度,官网就有,其它语言有FreePascal和Go和Java和Python)

    在MIPS架构的CPU上开发软件,当然需要使用MIPS专用的工具链来编译代码.不过一般的LINUX发行版内都有相应的配套工具链供用户使用.Ci20出厂时的LINUX发行版为DEBIAN 7.5,相应的 ...

  6. linux输出信息调试信息重定向

    最近在做一个android系统移植的项目,所使用的开发板com1是调试串口,就是说会有uboot和kernel的调试信息打印在com1上(ttySAC0).因为后期要使用ttySAC0作为上层应用通信 ...

  7. javascript学习路线图

    史上最全的javascript学习路线图 JavaSctipt学习路线 完成整个课程大纲需要花上6~8周的时间,将学会完整的JavaScript语言(包括jQuery和一些HTML5).如果你没有时间 ...

  8. getch(),getche(),getchar()的区别

    先说基本区别. (1) getch()和getche()函数     这两个函数都是从键盘上读入一个字符.其调用格式为:      getch();      getche();     两者的区别是 ...

  9. 用Golang让自己的电脑自动登录“上网管理”系统

    用Golang让自己的电脑自动登录 1.缘起 大天朝的网络一般都是只对某些人开放的.上行下效,同样的措施也作用在我们的教育网上.我想不出来,为什么很多领导的总有这样的恶趣味(如果做的到,他们恨不得监控 ...

  10. SYN4201型 同步分频钟

    SYN4201型 同步分频钟 产品概述 SYN4201型同步分频钟是由西安同步电子科技有限公司精心设计.自行研发生产的一款高精度分频时钟,对输入的8路10MHz正弦信号分别进行同步分频处理,相应的输出 ...