JavaWeb-用Responds下载文件

el/2023/12/3 3:28:14

JavaWeb中用Respond实现下载文件的功能
主要分为3步
①获取下载文件的地址
②获取下载文件的文件名字
③想办法设置浏览器能够支持(Content-Disposition)下载我们需要的东西,中文文件名URLEncoder.encode编码,否则下载的时候文件名字会用“——”代替。
Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框。
格式说明
content-disposition = “Content-Disposition” “:” disposition-type *( “;” disposition-parm )
字段说明
Content-Disposition为属性名
disposition-type是以什么方式下载,如attachment为以附件方式下载
disposition-parm为默认保存时的文件名
服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment:
具体实现代码如下:
①String realpath=“D:\JAVAIDEA\MavenWeb\target\classes\test.png”;
这个绝对路径可以在运行Tomcat时候的Target里面去找到他的路径
②String filename = realpath.substring(realpath.lastIndexOf("\")+1);
主要的核心思想是获取最后一个“\”后面的字段
resp.setHeader(“Content-Disposition”,“attachment;filename=”+ URLEncoder.encode(filename,“UTF-8”));
以上代码即可实现用ResPond下载文件。
当然了 还可以直接在该网站上显示图片
代码如下:
//获取下载文件的输入流
FileInputStream in = new FileInputStream(realpath);
//创建缓冲区
int len=0;
byte[] buffer = new byte[1024];
//创建文件输出流
ServletOutputStream out = resp.getOutputStream();
while((len=in.read(buffer))!=-1)
{
out.write(buffer,0,len);
}
in.close();
out.close();
response.setHeader用法:
一秒刷新页面一次 response.setHeader(“refresh”,“1”);

二秒跳到其它页面 response.setHeader(“refresh”,“2;URL=otherPagename”);

没有缓存:
response.setHeader(“Pragma”, “No-cache”);
response.setHeader(“Cache-Control”, “no-cache”);

设置过期的时间期限
response.setDateHeader(“Expires”, System.currentTimeMillis()+自己设置的时间期限);

访问别的页面:response.setStatus(302); response.setHeader(“location”,“url”);

通知浏览器数据採用的压缩格式:response.setHeader(“Content-Encoding”,“压缩后的数据”);
快速浏览器压缩数据的长度:response.setHeader(“Content-Length”,压缩后的数据.length+"");

快速浏览器图片或视频:response.setHeader(“Content-type”,“这个參数在tomcat里conf下的web.xml里面找”);

inputstream in= this.getServletContext.getResourceAsStream("/2.jpg");
int len=0;
byte buffer[]= new byte[1024]

outputStream out = response.getOutputStream();

while(len=in.read(buffer)>0){
out.write(buffer,0,len)
}

快速浏览器已下载的形式:response.setHeader(“Content-disposition”,“attachment;filename=2.jpg”);

inputstream in= this.getServletContext.getResourceAsStream("/2.jpg");
int len=0;
byte buffer[]= new byte[1024]

outputStream out = response.getOutputStream();

while(len=in.read(buffer)>0){
out.write(buffer,0,len)
}


http://www.ngui.cc/el/414759.html

相关文章

爆笑的新结婚誓词

各位父老乡亲: 1S yG .kgt? r   今天,是我和妻子新婚大喜的日子,历经了几年你追我赶的辛苦,今天的结合真是来之不易。所以,为了珍惜这段美好姻缘,让老婆的家人放心,也让各位亲朋好友放心…

08年教育部对以下成语解释的纠正

1.知书达礼&#xff1a;仅知道书本知识是不够的&#xff0c;还要学会送礼&#xff1b; p:z~>ca 2.度日如年&#xff1a;日子非常好过&#xff0c;每天象过年一样&#xff1b; I[d<SHo 3.杯水车薪&#xff1a;每天办公室喝喝茶&#xff0c;月底可以拿到一车工资&#…

报表提示报表已锁定

在打印资产负债表或损益表等报表时,会提示报表已锁定.用另存为的方法,也不可以。再次打开时还是提示被锁定.重新安装软件和系统,问题依然存在.请问什么原因? 报表文件另存为&#xff0c;删除文件系统中ufow2000.ini文件&#xff0c;然后删除原文件&#xff0c;把另存为的文件改…

表单支持用友软件类型

NC软件适用表单产品一览表 软件版本 打印机 种类 适用表单产品 备注 NC5.0 激光/喷墨 凭证 A4激光   账簿 A4激光   针式 凭证 U8针打、7.1针打、账簿通针打   账簿 U8针打   NC3.5 激光/喷墨 凭证 A4激光   账簿 A4激光   针式 凭证 U8针…

用LogExplorer恢复数据库过程

原贴地址:http://expert.csdn.net/Expert/topic/2931/2931668.xml 因论坛不允许恢复超过30个帖,故新开此贴 首先答谢lynx1111、leeboyan(宝宝) 、realgz(realgz) 的热心帮助&#xff0c;同时也感谢islandnet(e兔子)、zhijiao(指教)、kkkksunday(我是猪小弟)、shuic…

搞笑的笑话

老总对秘书说&#xff1a;这几天我带你去北京走走.你准备下. 秘书打电话给老公&#xff1a;这几天我和老总去北京开会,你自己照顾自己. 老公给情人打电话&#xff1a;我老婆这几天去北京出差,我们也出来玩吧. 小男孩打电话&#xff1a;这几天不用上课&#xff0c;我有事情. …