技术标签: 文件下载
<a href="${pageContext.request.contextPath}/File/a.txt">文本文件</a>
如果文件可以直接被浏览器解析,那么会在浏览器中直接打开,不能被浏览器直接解析的,就是下载操作。直接打开的要想下载,右键另存为。
超链接下载,要求下载的资源,必须是可以直接被浏览器直接访问的。(比如我的文件没有放在当前项目下,而是放到了另一个D盘下,浏览器就访问不到我D盘下的文件)
客户端访问服务器静态资源文件时,静态资源文件是通过缺省Servlet返回的,在Tomcat配置文件conf/web.xml中的org.apache.catalina.servlets.DefaultServelt操作的
新建一个jsp,填写代码
<body>
<a href='${pageContext.request.contextPath}/download?filename=a.txt'>txt文件</a>
<a href='${pageContext.request.contextPath}/download?filename=a.jpg'>jpg文件</a>
<a href='${pageContext.request.contextPath}/download?filename=a.mp3'>mp3文件</a>
</body>
新建一个Servlet,download.java
public class download extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename=request.getParameter("filename");
File file=new File("d:/"+filename);
if (file.exists()) {
FileInputStream fis=new FileInputStream(file);//读取要下载文件的内容
OutputStream os=response.getOutputStream();//将要下载的文件内容通过输出流写回到浏览器
int len=0;
byte[] b=new byte[1024*1024];
while((len=fis.read(b))!=-1){
os.write(b,0,len);
}
os.close();
fis.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
这样做之后,浏览器也可以访问不在项目下的文件了。
但还是,如果文件可以直接被浏览器解析,那么会在浏览器中直接打开,不能被浏览器直接解析的,就是下载操作。直接打开的要想下载,右键另存为。
设置一个响应头,设置后的效果,就是无论返回的是否可以被浏览器解析,都是下载。
response.setHeader("content-disposition", "attachment;filename="+filename);
文件名乱码问题
如果文件名为中文,下载的时候文件名会为空。
添加代码
String agent=request.getHeader("user-agent");
if (agent.contains("MSIE")) {
//IE
filename=URLEncoder.encode(filename,"utf-8");
}else if (agent.contains("Firefox")) {
//火狐
filename="=?utf-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
}else{
//其他浏览器
filename=URLEncoder.encode(filename,"utf-8");
}
前话:以前上大学时,一直在寻找一种简单的IDE,拥有如下特点:1、集成丰富的控件(可以显示波形);2、编程语言简单(最好是C语言);3、拥有丰富的库(比如RS-232库、TCP/IP库、USB库等)。笔者曾经学过1、Visual C++开发,但发现其编程有点麻烦,还有就是控件有点简单,没有显示波形的控件(笔者当时对可以实时显示波形的工具一直比较着迷);2、LabVIEW开发,当时笔者觉得画图的...
Written By: yykingking [RCT] ([email protected])本文的思路有不少前人都曾经略微提到过,我只是去实现了下罢了. 某些RK,木马会经常HOOK一些关键函数从而达到隐藏等目的,而相应的ARK检测软件也会通常会先恢复这些关键函数的HOOK(譬如利用硬盘文件恢复),然后再调用来检测RK,这样就可以检测出某些隐藏.下面就介绍利用调试器实现某些内核函数的HOO
在eclipse的工程上选择属性,再选择Project Facets里面中选择Dynamic Web Module ,将2.3修改为2.5,提示如下信息:Cannot change version of project facet Dynamic Web Module to 2.5解决方法:在工程目录下有一个.settings文件夹,打开org.eclipse.wst.comm
问题:解决(简单快捷)1.先上传需要的rpm软件包2.根据提示的安装包版本,使用命令:yum install -y w3m-0.5.2-19.el6.x86_64.rpm3.最后安装成功其他安装包如果也是像这样不能下载安装,可以采用 yum install -y 具体版本的安装包 。...
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <title>webSocket小Demo</title> </head> <body> <div class="container"> <div> <input type="text" id="msg"> <
今天在用jQuery设置表单radio的选中时遇到了radio 设置checked但按钮还是没选中的情况: 是否有父机构? 是 否第一次按radio切换没问题,但是当我第二次切换radio就出现两个radio都没选中的样子。(单选框只能选一个) if (object.hasFather) { $("#editModal input[type='radio
生命在于运动,在当下社交软件流行的今天,衡量运动的指标是什么?当然就是运动所产生的步数了,微信运动排行需要、支付宝蚂蚁森林需要、QQ运动也需要,可是学习任务繁重、工作忙碌的我们,想在app上产生点运动步数太难了,怎么办?下面教小伙伴们手机不用越狱,安全有效的修改运动步数的方法,安卓苹果手机通用,从此,我也可以愉快的种树、刷运动排行榜了。下面就以苹果系统进行讲解,安卓操作方法基本相同,大家...
initWebSocket () { // 初始化weosocketthis.destroyWebSocket()try {console.log('连接websocket')const wsuri = 'ws://' + this.dataM.split('/')[2] + '?pageId=' + generateUUID()// ws地址this.webSocket = new WebSoc...
[email protected]_WEB:/sybase/OCS-12_5/bin> dbrestore*** 0+1/1 bcpout chuanpiao ***Server Message: CHQ_WEB - Msg 4806, Level 16, State 1:You cannot run the non-logged version of bulk copy in this database. P
前言: 目前上期技术CTP系统提供的API版本是C++版本,本文主要介绍Windows 32位平台下利用Swig工具将CTP C++接口trader API转换为python可调用的接口。此版本是在原先版本上的升级,解决了onfrontconnected回调的宕机问题。感谢知乎网友@warlock 一起探讨。1. 准备工作从CTP官网上下载CTP API点击下载。32位的API文件
import java.io.*;import java.util.Random;public class FileUtils { public static void main(String[] args) throws IOException { String source = &amp;quot;源文件夹&amp;quot;; String dest = &amp;quot;目标文件夹&amp;quot;; ...
配置文件请看Java实现redis https://blog.csdn.net/qq_41934990/article/details/81612180本编文章知识简单的实现了redis 的增删改查,指令不是很全还请大家见谅package com.huadian.Hash;import com.huadian.redisUntil.JedisPoolUntil;import or...