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>
效果图,点击后就直接下载到默认目录了。

web文件下载(附方案及源码配置)的更多相关文章
- Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)
Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码) 转 https://blog.csdn.net/lhl1124281072/article/details/800 ...
- HTML与CSS入门经典(第9版)试读 附随书源码 pdf扫描版
HTML与CSS入门经典(第9版)是经典畅销图书<HTML与CSS入门经典>的最新版本,与过去的版本相同,本书采用直观.循序渐进的方法,为读者讲解使用HTML5与CSS3设计.创建并维护世 ...
- WEB前端开发学习:源码canvas 雪
WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> ...
- [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护) 标签: .net加密产品c#dll工具 2011-03-24 21:06 27009人阅读 评论(13) 收藏 举报 分类: C ...
- NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)
NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码) 七月,酷暑难耐,认识的几位同学参加知乎看山杯,均取得不错的排名.当时天池AI医疗大赛初赛结束,官方正在为复赛进行平台调 ...
- web框架前言与学生数据库系统(附1.0源码)
对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def f1(request): ""&quo ...
- 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM
项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...
- Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
随机推荐
- 【C#】wpf自定义calendar日期选择控件的样式
原文:[C#]wpf自定义calendar日期选择控件的样式 首先上图看下样式 原理 总览 ItemsControl内容的生成 实现 界面的实现 后台ViewModel的实现 首先上图,看下样式 原理 ...
- 详解 Java 8 HashMap 实现原理
HashMap 是 Java 开发过程中常用的工具类之一,也是面试过程中常问的内容,此篇文件通过作者自己的理解和网上众多资料对其进行一个解析.作者本地的 JDK 版本为 64 位的 1.8.0_171 ...
- WPF 控件 深度克隆
原文:WPF 控件 深度克隆 http://social.msdn.microsoft.com/Forums/zh-SG/wpfzhchs/thread/e5c87129-966a-4d51-a934 ...
- mysql索引创建&查看&删除
1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...
- HtmlAgilityPack开发
官方网站: http://html-agility-pack.net/ Nuget安装: Install-Package HtmlAgilityPack C# HTML Parser Examples ...
- Android零基础入门第19节:Button使用详解
原文:Android零基础入门第19节:Button使用详解 Button(按钮)是Android开发中使用非常频繁的组件,主要是在UI界面上生成一个按钮,该按钮可以供用户单击,当用户单击按钮时,按钮 ...
- javascript学习路线图
史上最全的javascript学习路线图 JavaSctipt学习路线 完成整个课程大纲需要花上6~8周的时间,将学会完整的JavaScript语言(包括jQuery和一些HTML5).如果你没有时间 ...
- MiTeC System Information Component Suite 10.9.2 D5-XE3 Full Source
The most complex system information probe in Delphi world, it consists of many standalone components ...
- Qt:解析命令行(使用QCommandLineOption和QCommandLineParser)
Qt从5.2版开始提供了两个类QCommandLineOption和QCommandLineParser来解析应用的命令行参数. 一.命令行写法命令行:"-abc" 在QComma ...
- 记录一次PHP项目报502的问题
问题描述 最近有台服务器偶尔会报502错误,虽然量不多,每天就几十个,但是也必须得找到原因,避免让小问题变成大问题. 排查过程 502错误的原因,一般是对用户访问请求的响应超时造成的,一开始以为是请求 ...