浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)
文章目录
- 简介
- Chrome已阻止不安全内容下载
- PDF直接打开
- txt、xml、js文件被自动打开了而不是下载
- 阿里OSS设置response header
- 阿里OSS修改metadata
简介
随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。
在JavaScript下载文件(简单模式、跨域问题、文件压缩)我们已经介绍了一些下载问题。
本篇我们将继续介绍2个问题:
- 文件下载安全设置
- 浏览器和服务端如何控制文件是下载还是打开
Chrome已阻止不安全内容下载
相信很多朋友都突然就遇到了每次下载文件都要点保留的糟心事,怎么不要每次都确认呢?
可以设置允许指定网站的不安全内容:
设置-> 隐私和安全 -> 网站设置 -> 不安全内容
PDF直接打开
Chrome对于自己支持的文件类型,访问链接的时候是直接打开,例如pdf、txt、xml、js
有很多非IT专业的业务老师可不知道可以文件另存为(ctrl+s)这种操作,只知道下载不了。或者知道另存为,但是只想下载文件,不想直接打开,还要自己另存为。
如果我们希望是下载文件而不是直接打开文件应该怎么办呢?
对于PDF类型来说,可以通过下面的方式设置:
设置-> 隐私和安全 -> 网站设置 -> 不安全内容
txt、xml、js文件被自动打开了而不是下载
Chrome针对PDF被直接打开不是下载有单独的设置,但是对于txt、xml、js文件被自动打开而不是下载了怎么处理呢?
答案是在response的header中设置Content-Disposition为attachment
后端设置:
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
浏览器看到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);
}
相关文章:

浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)
文章目录 简介Chrome已阻止不安全内容下载PDF直接打开txt、xml、js文件被自动打开了而不是下载阿里OSS设置response header阿里OSS修改metadata 简介 随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。 在JavaScript下载…...
机器学习——量子机器学习
量子机器学习: 未来的机器学习方法 量子计算和机器学习的结合为计算科学带来了前所未有的前景。量子机器学习(QML)正在迅速发展,目标是利用量子计算的优势来处理传统计算机无法高效解决的问题。本文将深入探讨量子机器学习的基本概念、量子计算的关键技术、具体的量…...

[Linux] 创建可以免密登录的SFTP用户
本文主要包含: 创建新用户创建密钥对用于免密登录新用户将新建用户改造为SFTP用户为SFTP上传数据设置限速 1. 创建新用户 sudo useradd sftp_user sudo passwd sftp_user # 输入密码2. 创建密钥对 参考这篇文章 [Linux] 生成 PEM 密钥对实现服务器的免密登录 3. 将新建用户…...
【部署篇】Redis-03主从模式部署(源码方式安装)
一、准备主机 主从模式只是解决了数据备份容灾并不能解决单点故障问题,生产环境中需要在主从模式基础上增加哨兵,实现主节点宕机时自动将其中一个重节点设置为新的主节点。 主机IP角色说明192.168.128.31master,主节点可读写。192.168.128…...
C/C++语言基础--C++四大类型转换讲解
本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 通过前面几节课,我们学习了抽象、封装、继承、多态、异常等概念,这一篇我们将继续学习C的类型转换,和C语言还有很大区别的;在本节课最后,也简要说…...

KafKa 集群【docker compose】
文章目录 主机准备部署编辑 docker-compose.ymlcontrollerbroker生成cluster_id 一篇完整的 docker-compose.yml 文件查看集群状态使用 kafka-ui 查看拉取 kafka-ui添加集群查看集群状态 使用命令行查看 配置讲解controllerbroker 主机准备 IPcontroller idbroker id192.168.1…...

【工具篇】MLU运行XInference部署手册
文章目录 前言一、平台环境准备二、代码下载三、安装部署1.正常pip 安装 四、运行结果展示1.如果界面404或没有东西请这样做2.运行效果 前言 Xorbits Inference(Xinference)是一个功能强大、用途广泛的库,旨在为语言、语音识别和多模态模型提…...

计算机网络:数据链路层 —— 扩展共享式以太网
文章目录 共享式以太网共享式以太网存在的问题在物理层扩展以太网扩展站点与集线器之间的距离扩展共享式以太网的覆盖范围和站点数量 在链路层扩展以太网网桥的主要结构网桥的基本工作原理透明网桥自学习和转发帧生成树协议STP 共享式以太网 共享式以太网是当今局域网中广泛采…...
平安养老险深圳分公司:创新养老服务,深入践行金融为民
党的二十届三中全会《决定》提出:“积极发展科技金融、绿色金融、普惠金融、养老金融、数字金融,加强对重大战略、重点领域、薄弱环节的优质金融服务。” 为经济社会发展提供高质量服务,更好满足人民日益增长的美好生活需要,金融…...

静态站点生成器哪家强?
有一种方法,让你写好文档后,快速地让同事、用户和合作伙伴看到,这就是静态站点生成器。 静态站点生成器是一种软件,用于创建不需要服务器端脚本的网站。这些网站由纯HTML文件组成,可能还包括CSS和JavaScript来增强功…...

从0开始部署优化虚拟机
一,vm workstation 安装 CentOS-7 忽略 二、查看虚拟机IP ip address 得到 192.168.196.128/24 宿主机进行Ping测试 C:\Users\Administrator>ping 192.168.196.128正在 Ping 192.168.196.128 具有 32 字节的数据: 来自 192.168.196.128 的回复: 字节32 时间…...

录屏有道, 四款必备录屏工具推荐!
制作教程视频、游戏直播或是远程会议记录等都需要录屏,那么到底应该怎么录屏呢?接下来就给大家介绍几个好用的录屏工具 Foxit REC 直达链接:www.foxitsoftware.cn/REC/ 操作教程:立即获取 Foxit REC以其强大的功能、简洁的界面…...

5G NR:UE初始接入信令流程浅介
UE初始接入信令流程 流程说明 用户设备(UE)向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息,如果 UE 被接纳,则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置,并将其传输到 gNB-CU。IN…...
探索 Spring AI:Java 开发者的 AI 应用开发新利器
在当今这个由人工智能驱动的时代,AI 技术正在以前所未有的速度改变着我们的工作和生活方式。对于 Java 开发者来说,将 AI 能力集成到他们的应用程序中,已经成为了一个迫切的需求。阿里云开源的 Spring AI Alibaba 框架,正是为了满…...

Linux历史
Linux 于 1991 年由芬兰学生 Linus Torvalds 作为个人项目开始,旨在创建一个新的免费操作系统内核。在其历史发展中,Linux 内核经历了持续的增长。自 1991 年首次发布源代码以来,Linux 内核从少量的 C 语言文件,且受限于禁止商业发…...
C++ 方法积累
std::numeric_limits<UInt32>::max()placement new 用于控制分配空间 PostingListInMemory * posting_list arena.alloc<PostingListInMemory>();new (posting_list) PostingListInMemory();/// placement new;PostingListInMemory & operator(const Posting…...

区块链-智能合约Solidity编程
文章目录 一、ubuntu安装二、FISCO BCOS安装五、 WeBASE安装5.1 WeBASE简介5.2 节点前置服务搭建5.3 调用HelloWorld合约 七、Solidity极简入门7.1. 值类型7.2. 变量数据存储和作用域7.3. 函数7.4 控制流7.5 数组&映射7.6 结构体7.7 修饰符7.8 事件7.9 面向对象7.10 抽象合…...

VS Code创建VUE项目(一)工具安装与项目创建
一.安装与配置npm 1.下载安装Node.js 安装Node.js 下载地址: Node.js — 在任何地方运行 JavaScript (nodejs.org)或下载 | Node.js 中文网 下载后一步步安装就好(安装过程基本一路直接“NEXT”就可以了,直到Finished)&#x…...

cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)
众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…...

Docker安装Nginx
前提:Docker已安装好,本人使用的为自带docker的云服务器,docker常用命令已掌握,yjj为在根目录创建的一个文件夹,可自行修改对应的目录。 1、安装镜像,可去dockerhub上面找,一般都是组件名称。do…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...