最近项目需要在浏览器中通过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读取文件流,设置浏览器下载或直接预览操作相关推荐

  1. java 读取浏览器_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  2. java用浏览器下载文件_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过url预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  3. java浏览器预览文件_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  4. java图片预览上传_java实现文件上传、下载、图片预览

    这篇文章主要介绍了java实现文件上传.下载.图片预览,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 多文件保存到本地: @ResponseBody ...

  5. java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...

    如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...

  6. java 读取远程文件并让浏览器下载

    java 读取远程文件并让浏览器下载 @RequestMapping("/downLoadFile")@ResponseBodypublic ResponseEntity<b ...

  7. java根据Freemarker模板渲染出Excel文件并在浏览器中下载

    **java根据Freemarker模板渲染出Excel文件并在浏览器中下载** 准备工作 1.导入的依赖 2.创建模板 Freemrker语法大全: [Freemarker语法使用请点击该链接跳转学 ...

  8. pandas将列表list插入到dataframe的单元格中、pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)

    pandas将列表list插入到dataframe的单元格中.pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes) 目录

  9. 文件_ _android从资源文件中读取文件流并显示的方法

    ======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private ...

最新文章

  1. android activity之间传值
  2. 阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!
  3. oracle 查询数据 实验笔记三
  4. Android Drawable文件夹对应像素密度
  5. ASP.NET中的HttpWorkerRequest对像及其应用
  6. 拓端tecdat|数据分析促进白血病预测诊断
  7. 容器技术Docker K8s 48 服务网格(ASM)-阿里云服务网格使用
  8. Photoshop插件-黑白(二)-脚本开发-PS插件
  9. 斑凶鹰来袭,斑鸠逃生
  10. JAVA-数据类型与运算符笔记
  11. Bomb Game(翻译)
  12. 常用复合逻辑运算,与非,或非,异或,同或
  13. 理想主义者与现实主义者的差别
  14. 华为路由交换设备命令集合,建议收藏!
  15. 关于uniapp获取ios客户端平台安全距离(底部导航条)的方法
  16. HDFS HA支持多Standby节点机制
  17. RISC-V特权级寄存器及指令文档
  18. 如何用3D技术“复现”遗址?
  19. 整数分数计算机,整数减分数怎么算
  20. 中文组织机构名与简称的识别

热门文章

  1. 小说中场景的功能_《流浪地球》:从小说到电影
  2. 局域网中计算机网络密码查看,Win10怎么查看电脑上已知的wifi网络密码
  3. go为什么比php性能好,刚学 GO,撸了个支付宝发券的程序,为什么性能还比不上 PHP ?...
  4. c语言如何判断是否是子序列,leetcode392(判断子序列)--C语言实现
  5. 小程序的点赞功能能和浏览次数功能_扫码点餐小程序好用吗?小程序还能实现哪些功能?...
  6. java 机器码 虚拟机_Java虚拟机:源码到机器码
  7. java文件 linux_Linux执行Java文件
  8. mysql5.6.msi 百度云_如何安装Mysql数据库类型msi(5.6)
  9. java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...
  10. 新手攻略熔炉_我的世界攻略:生存模式新手攻略