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

news2024/11/24 14:00:01

文章目录

  • 简介
  • 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.coloradmin.cn/o/2205578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙OS投票机制

(基于openharmony5.0) 投票机制 param get | grep ohos.boot.time 图 投票机制参数图 只有当所有的投票完成,开机动画才会退出,整理需要投票的系统应用(三方应用不参与投票)如下图所示: 以进程foundation为例&…

pytorh学习笔记——波士顿房价预测

机器学习的“hello world”:波士顿房价预测 波士顿房价预测的背景不用提了,简单了解一下数据集的结构。 波士顿房价的数据集,共有506组数据,每组数据共14项,前13项是影响房价的各种因素,比如&…

深入探究d3d9.dll文件:从d3d9.dll文件丢失的原因到解决方案

在使用电脑的过程中,你是否突然遇到过这样令人头疼的情况:当你试图打开某个游戏或者特定的图形软件时,屏幕上弹出一个恼人的错误提示框,上面赫然写着“d3d9.dll文件丢失”。这个看似小小的文件缺失,却可能像一道无法逾…

如何把视频变成自己的原创?提升视频原创度的7个技巧

在短视频平台发布作品时,时常因为原创问题,而被限流。如何在海量视频中脱颖而出,让自己的作品具有独特性和原创性,是每位创作者都需要思考的问题。本文将详细介绍如何通过一系列前期准备和后期处理技巧,将视频素材转化…

Windows11 24H2 纯净专业工作站版:无捆绑,安心使用!

Windows11系统工作站版集成Windows11系统专业版的所有安全优势和其他丰富特性,全面满足用户的使用需求。今天,系统之家小编给大家带来2024最新的Windows11 24H2纯净专业工作站版系统下载,这个系统版本不包含捆绑流氓软件,系统环境…

洛谷 P7076 [CSP-S2020] 动物园(位运算)

题目传送门 解题思路 可以先开一个 把所有动物的编号或起来。 然后对于每一个 和 ,我们可以判断一下这个饲料是否需要购买(对于原来有的动物)。 如果它原本是不需要购买的,我们可以开一个 来标记这一位。 最后,…

内网渗透-隧道代理转发

文章目录 前言环境搭建工具清单工具使用Frp命令执行实验 Lcx命令执行实验 reGeorg命令执行实验Proxifier ew(EarthWorm)正向代理命令执行实验 反向代理命令执行实验SocksCap netsh命令执行 pingtunnel命令执行实验 ngrok命令执行&&实验 cs命令执行实验 前言 本文章介绍…

如何安装NOI(全国青少年信息学奥林匹克竞赛) Linux环境:详细安装指南

在全国青少年信息学奥林匹克竞赛(NOI)中,NOI Linux环境是比赛指定的操作系统。该环境基于Ubuntu,专门为编程竞赛设计和优化,包含了C编程和算法竞赛所需的工具和编译器。为了让学生在比赛中熟悉这一环境,了解…

深圳有哪些神仙公司?

前文写了一篇杭州有哪些神仙公司?有读者看完之后,建议出一篇深圳的神仙公司名单,这就安排了。 之前在深圳待过一段时间,整体印象很好,气候宜人,是一座充满活力、创新和机遇的城市。 坐标深圳的小伙伴&…

【C++】线程库常用接口

1.创建线程,等待线程,获取线程id 2.全局变量,局部变量,互斥锁 要让不同的线程访问同一个变量和同一把锁,有两种方法: 2.1方法一 定义全局的变量和全局的锁,这样自然就能访问到。 但全局变量在…

物联网护士站!RFID与传感技术如何提升病患管理智能化?

随着物联网技术的迅速发展,智慧医疗的理念逐渐被广泛应用于医院管理和医疗服务中,成为现代医疗的重要组成部分。通过物联网技术的引入,医院不仅能够实现对患者的智能化医疗,还能高效管理设备和物资,从而推动智慧医疗的…

[C++]使用onnxruntime部署yolov8-cls图像分类onnx模型

如果只需要opencv去部署yolov8分类模型可以参考博文:https://blog.csdn.net/FL1623863129/article/details/142734780 本文和 opencv去部署yolov8分类模型区别是:opencv部署推理核心使用opencv自带api,而本文推理核心用的onnxruntime&#x…

ros2:从github上下载源码进行编译

首先,创建工作空间 # 1. 递归创建工作空间目录 mkdir -p catkin_ws/src # 2. 进入src目录 cd catkin_ws/src然后如果你没有安装git,需要 sudo apt install git然后输入。 git clone https://github.com/6-robot/wpr_simulation.git这时候,…

LeetCode-12. 整数转罗马数字【哈希表 数学 字符串】

LeetCode-12. 整数转罗马数字【哈希表 数学 字符串】 题目描述:解题思路一:贪心解题思路二:背诵版,只需写出1954开头的数字进行贪心即可。解题思路三:暴力匹配 题目描述: 七个不同的符号代表罗马数字&…

拿下奇怪的前端报错:1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点

问题背景 在一个使用MongoDB GridFS实现文件存储和分片读取的项目中,同事遇到了一个令人困惑的问题:音频文件总是丢失最后几秒,视频文件也出现类似情况。更奇怪的是,播放器显示的总时长为无限大。这个问题困扰了团队成员几天&…

gradle build --offline idea怎么配置 打包命令使用gradle build --offline进行打包怎么操作

两种方式 1:一种命令行执行gradle build --offline 2:一种直接gradle这里单击离线

多模态理论——什么是多模态?多模态的关键技术?

多模态理论 文章目录 多模态理论1.什么是多模态(multimodal)2.深度学习中的多模态3.多模态学习的关键技术3.1模态表示3.2多模态对齐3.3多模态融合 4.多模态任务 1.什么是多模态(multimodal) 模态指的是数据或者信息的表现形式&am…

完美收官丨飞易通端到端整体解决方案助力嵌入式技术发展

2024年10月10日,Embedded World 2024展会在美国德克萨斯州奥斯汀完美收官。Embedded World 2024是嵌入式系统领域的全球性盛会,汇聚了来自世界各地的专业人士,促进了嵌入式系统、工业自动化、汽车技术和通信系统领域的合作与发展。 应展会举办…

深入解析 Go 语言中的结构体:从基础用法到高级技巧的全方位指南

结构体(Struct)是 Go 语言中的一种重要数据类型,能够帮助我们将多个数据组合成一个自定义的类型。与其他编程语言的类(Class)类似,结构体允许我们定义字段、方法,并灵活操作数据。本文将从基础到…

遥控器传输信号算法详解!

一、算法概述 无人机遥控器信号传输算法主要基于无线通信技术,通过特定的调制、编码和信号处理技术,将遥控器的操作指令转化为无线电信号,并传输给无人机。无人机接收到信号后,再将其解码为可识别的指令,从而实现对无…