解决Java上传文件根据路径在浏览器访问不能在线浏览的问题
问题描述
今天前端和我说了一个问题,为什么通过接口上传到服务器的文件,有时候可以直接通过url在网上也预览,有的必须要下载到本地才能预览呢。
这真把我问住了,然后我就下去测试了一下,还真是这种情况!
还原场景
先还原下场景。
这是我本来的上传附件的接口:
我们通过接口测试下,可以看到是上传成功的:
然后把url直接放到浏览器进行浏览:
按下回车,走你,确实出现了那个问题!
思考问题
遇到问题不要慌,我初步猜测是跟http的请求头有关的,但是具体说不出来,然后就带着我的疑问。在网上找到了下面的相关描述:
content-type属性
这个属性大家一般见到的都比较多,用于定义网络文件的类型和网页的编码,一般用于做文件下载的时候我们都会定义它的属性是流或者其他。
在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
例如:Content-Type:text/html;charset:utf-8;
关于它的使用和不同格式,网上有很多大佬都写过相关文章,我就不做赘述了。
重点是下面这个属性
content-disposition属性
它指示如何处理响应内容。一般有如下两种方式:
1:inline:直接在页面显示
2:attchment:以附件形式下载
content-disposition 是 MIME 协议的扩展 ,其作用就是用来处理一些文件的显示问题, content-disposition的值为inline时,表示它可以显示在网页内,或作为网页,此时浏览器会自动进行预览, content-disposition的值为attachment时,表示它应该下载,大多数浏览器呈现“另存为”对话框,如果filename存在值,也会预填入文件名。
比如我下载文件的接口,就用带了这两个属性,而content-disposition的值正是attachment
ps:这两个属性都可以通过response去设置,只不过对于content-disposition的修改要放在请求头(header)里面
解决问题
很明显,我遇到的问题就是没有做content-disposition的处理,把content-disposition的值设置为attachment即可
相关文章
- java连接mongodb的一个奇葩问题及奇葩解决方式
- java:RandomAccessFile随机读取文件内容
- java JFileChooser选择文件和保存文件
- Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)
- Java实现 蓝桥杯VIP 基础练习 高精度加法
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 【JAVA】Java循环语句中的continue跳转进入下一次循环是否判断循环条件
- java struts2入门学习实例--使用struts2快速实现多个文件上传
- android 布局页面文件出错故障排除Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
- Java如何实现大文件分片上传,断点续传和秒传
- ABAP和Java SpringBoot的单元测试
- paip.判断文件是否存在uapi python php java c#
- paip.文件读写api php java python总结.txt
- Java操作,springMVC上传的文件
- 当年的Java考试:JAVA&移动应用&大数据-大三-社区疫苗接种管理系统(全部源码·保姆式呵护)
- 常见Java面试题之JVM加载class文件的原理机制
- 你知道,java项目中是如何获取文件地址的吗?
- JAVA+VUE3.0+MINIO 大文件上传(极速上传,分片上传)
- Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法
- Java:SpringBoot实现文件上传和访问
- java中反射机制通过字节码文件对象获取字段和函数的方法
- Struts2.5.6版本文件下载问题Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack
- 在 Java 项目中解压7Zip特殊压缩算法文件
- 【java】Java 重写(Override)与重载(Overload)