当前位置: 首页 > news >正文

浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)

文章目录

  • 简介
  • Chrome已阻止不安全内容下载
  • PDF直接打开
  • txt、xml、js文件被自动打开了而不是下载
  • 阿里OSS设置response header
  • 阿里OSS修改metadata

简介

随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。

在JavaScript下载文件(简单模式、跨域问题、文件压缩)我们已经介绍了一些下载问题。

本篇我们将继续介绍2个问题:

  1. 文件下载安全设置
  2. 浏览器和服务端如何控制文件是下载还是打开

Chrome已阻止不安全内容下载

相信很多朋友都突然就遇到了每次下载文件都要点保留的糟心事,怎么不要每次都确认呢?
安全阻止

可以设置允许指定网站的不安全内容:

设置-> 隐私和安全 -> 网站设置 -> 不安全内容

运行不安全内容

PDF直接打开

Chrome对于自己支持的文件类型,访问链接的时候是直接打开,例如pdf、txt、xml、js

有很多非IT专业的业务老师可不知道可以文件另存为(ctrl+s)这种操作,只知道下载不了。或者知道另存为,但是只想下载文件,不想直接打开,还要自己另存为。

如果我们希望是下载文件而不是直接打开文件应该怎么办呢?

对于PDF类型来说,可以通过下面的方式设置:

设置-> 隐私和安全 -> 网站设置 -> 不安全内容

PDF下载设置

txt、xml、js文件被自动打开了而不是下载

Chrome针对PDF被直接打开不是下载有单独的设置,但是对于txt、xml、js文件被自动打开而不是下载了怎么处理呢?

答案是在response的header中设置Content-Disposition为attachment

后端设置:

response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

Content-Disposition为attachment

浏览器看到response的Content-Disposition值为attachment,就会执行下载操作,而不是直接打开。

对于PDF来说,如果Chrome已经设置了【在Chrome中打开PDF文件】,那么就算是response的Content-Disposition值为attachment,还是会直接打开PDF文件。

阿里OSS设置response header

对于我们自己服务端好设置,但是对于像oss组件这种如何设置呢?

下面我们以阿里OSS设置来说明一下:

可以通过PutObjectRequest来设置

@Test
public void uploadHeader() {String endpoint = "http://oss.com";String accessKeyId = "xxx";String accessKeySecret = "sssss";OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String content = "Hello OSS";ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(content.getBytes());PutObjectRequest request = new PutObjectRequest(bucketName,"test/hello.txt",byteArrayInputStream);request.addHeader("Content-Disposition","attachment");ossClient.putObject(request);
}

阿里OSS修改metadata

如果文件已经上传过了,如何修改呢?

我们可以通过拷贝的方式修改metadata:

@Test
public void metaHeader() {String endpoint = "http://oss.com";String accessKeyId = "xxx";String accessKeySecret = "sssss";OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String objectName = "test/test030801.txt";CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName);ObjectMetadata meta = new ObjectMetadata();meta.setContentType("text/plain");meta.setContentDisposition("attachment");request.setNewObjectMetadata(meta);ossClient.copyObject(request);
}
http://www.lryc.cn/news/462822.html

相关文章:

  • 机器学习——量子机器学习
  • [Linux] 创建可以免密登录的SFTP用户
  • 【部署篇】Redis-03主从模式部署(源码方式安装)
  • C/C++语言基础--C++四大类型转换讲解
  • KafKa 集群【docker compose】
  • 【工具篇】MLU运行XInference部署手册
  • 计算机网络:数据链路层 —— 扩展共享式以太网
  • 平安养老险深圳分公司:创新养老服务,深入践行金融为民
  • 静态站点生成器哪家强?
  • 从0开始部署优化虚拟机
  • 录屏有道, 四款必备录屏工具推荐!
  • 5G NR:UE初始接入信令流程浅介
  • 探索 Spring AI:Java 开发者的 AI 应用开发新利器
  • Linux历史
  • C++ 方法积累
  • 区块链-智能合约Solidity编程
  • VS Code创建VUE项目(一)工具安装与项目创建
  • cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)
  • Docker安装Nginx
  • 大数据治理:构建新时代数据生态的关键
  • Leetcode 1223 LCA of Deepest TreeNode
  • C++从入门到起飞之——红黑树 全方位剖析!
  • Java基于SSM微信小程序物流仓库管理系统设计与实现(lw+数据库+讲解等)
  • [LeetCode] 733. 图像渲染
  • 智能EDA小白从0开始 —— DAY23 PyAether深度解析与技术展望
  • 从深海探测到海洋强国:数字孪生助力海洋装备跨越式发展
  • 架构师备考-背诵精华(系统质量属性)
  • Pycharm下载安装教程(详细步骤)+汉化设置教程
  • 网络安全入门
  • 你真的了解Canvas吗--解密十【ZRender篇】