java 看书浏览器官_JAVA读取文件流,设置浏览器下载或直接预览操作
最近项目需要在浏览器中通过url预览图片。但发现浏览器始终默认下载,而不是预览。研究了一下,发现了问题:
// 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注释掉,浏览器会默认预览。 response.addheader("content-disposition", "attachment;filename=" + fileutil.getoriginalfilename(path));
然后需要注意:
response.setcontenttype(contenttype);//不同的文件类型,contenttype不一样,比如图片一般是image/jpeg、image/png等
@requestmapping(value = "getfile/{folder}/{filename:.+}*", method = requestmethod.get)
public void getfile(httpservletresponse response, @pathvariable string folder,
@pathvariable string filename)
{
// 设置编码
response.setcharacterencoding("utf-8");
try
{
string path = folder + "/" + filename;
boolean flag = ossclient.doesobjectexist(ossproperties.getbucket(), path);
// 判断文件是否存在
if (flag)
{
// 清空response
response.reset();
// 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注释掉,浏览器会默认预览。
// response.addheader("content-disposition",
// "attachment;filename=" + fileutil.getoriginalfilename(path));
// response.addheader("content-length", "" + buf.length);
outputstream toclient = new bufferedoutputstream(response.getoutputstream());
// bytearrayoutputstream bos = new bytearrayoutputstream(1024);
ossobject ossobject = ossclient.getobject(ossproperties.getbucket(), path);
string contenttype = ossobject.getobjectmetadata().getcontenttype();
system.out.println(contenttype);
//注意contenttype类型
response.setcontenttype(contenttype);
byte[] buf = new byte[1024];
inputstream in = ossobject.getobjectcontent();
int l;
while ((l = in.read(buf)) != -1)
{
// if (buf.length != 0)
// {
toclient.write(buf, 0, l);
// }
}
in.close();
// 写完以后关闭文件流
toclient.flush();
toclient.close();
// response.getoutputstream().write(bos.tobytearray());
}
else
{
response.senderror(httpservletresponse.sc_not_found, "找不到相关资源");
}
}
catch (ioexception e)
{
e.printstacktrace();
}
}
补充知识:【java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开
默认情况下,浏览器设定是inline形式,对于服务器返回的文件,能打开就打开,不能打开就自动下载。
content-disposition 设置
大多数情况下,后端都是实现一个文件管理的功能,通过文件的唯一标志去获取文件流。后端都会读取文件,然后文件的流写入到response的输出流,这样就可以实现文件的访问了。
但是有些时候,实现下载功能,后端返回的是图片,浏览器却直接把图片打开了?怎么回事?
这就是content-disposition设置的问题,如下都是java示例:
设置为inline,如果浏览器支持该文件类型的预览,就会打开,而不是下载:
response.setheader("content-disposition", "inline; filename=111.jpg");
设置为attachment,浏览器则直接进行下载,纵使他能够预览该类型的文件。
response.setheader("content-disposition", "attachment; filename=111.jpg");
特别说明:chrome不设置content-type也会自动打开,如果是它可识别预览的文件。
示例代码
package cn.hanquan.controller;
import java.io.file;
import java.io.ioexception;
import javax.servlet.servletoutputstream;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import org.apache.commons.io.fileutils;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.servlet.modelandview;
@controller
public class demodownload {
@requestmapping("download")
public void download(string filename, httpservletresponse res, httpservletrequest req) throws ioexception {
// 设置响应流中文件进行下载
// attachment是以附件的形式下载,inline是浏览器打开
// bbb.txt是下载时显示的文件名
// res.setheader("content-disposition", "attachment;filename=bbb.txt"); // 下载
res.setheader("content-disposition", "inline;filename=bbb.txt"); // 浏览器打开
// 把二进制流放入到响应体中
servletoutputstream os = res.getoutputstream();
system.out.println("here download");
string path = req.getservletcontext().getrealpath("files");
system.out.println("path is: " + path);
system.out.println("filename is: " + filename);
file file = new file(path, filename);
byte[] bytes = fileutils.readfiletobytearray(file);
os.write(bytes);
os.flush();
os.close();
}
}
浏览器直接打开效果
下载效果
以上这篇java读取文件流,设置浏览器下载或直接预览操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!
java 看书浏览器官_JAVA读取文件流,设置浏览器下载或直接预览操作相关推荐
- java 读取浏览器_JAVA读取文件流,设置浏览器下载或直接预览操作
最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...
- java用浏览器下载文件_JAVA读取文件流,设置浏览器下载或直接预览操作
最近项目需要在浏览器中通过url预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...
- java浏览器预览文件_JAVA读取文件流,设置浏览器下载或直接预览操作
最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...
- java图片预览上传_java实现文件上传、下载、图片预览
这篇文章主要介绍了java实现文件上传.下载.图片预览,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 多文件保存到本地: @ResponseBody ...
- java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...
如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...
- java 读取远程文件并让浏览器下载
java 读取远程文件并让浏览器下载 @RequestMapping("/downLoadFile")@ResponseBodypublic ResponseEntity<b ...
- java根据Freemarker模板渲染出Excel文件并在浏览器中下载
**java根据Freemarker模板渲染出Excel文件并在浏览器中下载** 准备工作 1.导入的依赖 2.创建模板 Freemrker语法大全: [Freemarker语法使用请点击该链接跳转学 ...
- pandas将列表list插入到dataframe的单元格中、pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)
pandas将列表list插入到dataframe的单元格中.pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes) 目录
- 文件_ _android从资源文件中读取文件流并显示的方法
======== 1 android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private ...
最新文章
- android activity之间传值
- 阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!
- oracle 查询数据 实验笔记三
- Android Drawable文件夹对应像素密度
- ASP.NET中的HttpWorkerRequest对像及其应用
- 拓端tecdat|数据分析促进白血病预测诊断
- 容器技术Docker K8s 48 服务网格(ASM)-阿里云服务网格使用
- Photoshop插件-黑白(二)-脚本开发-PS插件
- 斑凶鹰来袭,斑鸠逃生
- JAVA-数据类型与运算符笔记
- Bomb Game(翻译)
- 常用复合逻辑运算,与非,或非,异或,同或
- 理想主义者与现实主义者的差别
- 华为路由交换设备命令集合,建议收藏!
- 关于uniapp获取ios客户端平台安全距离(底部导航条)的方法
- HDFS HA支持多Standby节点机制
- RISC-V特权级寄存器及指令文档
- 如何用3D技术“复现”遗址?
- 整数分数计算机,整数减分数怎么算
- 中文组织机构名与简称的识别
热门文章
- 小说中场景的功能_《流浪地球》:从小说到电影
- 局域网中计算机网络密码查看,Win10怎么查看电脑上已知的wifi网络密码
- go为什么比php性能好,刚学 GO,撸了个支付宝发券的程序,为什么性能还比不上 PHP ?...
- c语言如何判断是否是子序列,leetcode392(判断子序列)--C语言实现
- 小程序的点赞功能能和浏览次数功能_扫码点餐小程序好用吗?小程序还能实现哪些功能?...
- java 机器码 虚拟机_Java虚拟机:源码到机器码
- java文件 linux_Linux执行Java文件
- mysql5.6.msi 百度云_如何安装Mysql数据库类型msi(5.6)
- java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...
- 新手攻略熔炉_我的世界攻略:生存模式新手攻略