解决Windows + Chrome 使用Blob下载大文件时,部分情况下报错net:ERR_FAILED 200 (OK)的问题

背景:

部分线上用户反馈,下载文件会报错,但重启电脑又好了。测试无法复现。遂远程客户,发现在下载超过一定阈值大小的文件时,会报错。
但直接点击下载链接,可以正常下载
查阅代码,以前的写法是

function getFileBlob (url) {return request({url: url,method: 'get',responseType: 'blob'})
}
getFileBlob(url).then(res => {let eleLink = document.createElement('a')document.body.appendChild(eleLink)eleLink.download = fileNameconst uri = window.URL.createObjectURL(res)eleLink.href = urieleLink.click()window.URL.revokeObjectURL(uri)
})

这个request,是axios封装而来
基本逻辑是:先下载文件到内存(Blob)里,改名后再正常下载
Q:为什么不直接使用url下载,而是要过一遍Blob
A:直接使用url下载,eleLink.download = fileName 修改下载文件名,在非同源情况下不会生效。我们的下载走的是CDN的域名,非同源域名。

解决方案

查阅资料后,决定规避使用Blob做下载

npm install streamsaver

代码修改:

import streamSaver from 'streamsaver'fetch(url + '?response-content-type=application%2Foctet-stream', {method: 'GET',
}).then(res => {const fileStream = streamSaver.createWriteStream(fileName, { size: file.size })return res.body.pipeTo(fileStream).then(() => console.log('下载完成'))
})

问题解决

查阅资料:

Chrome’s Blob Storage System Design

Error downloading content with js [net::ERR_FAILED 200 (OK)] #306

The error “net::ERR_FAILED 200 (OK)” appears when the size of the
“blob_storage” folder in your browser profile reaches a certain limit
(which depends on the size of free disk space).

I came across this when I downloaded files with DevTools open,
inspecting the background script of an extension.

It seems that there is a bug in Chrome, because of which, while
DevTools inspects the background extension script (which executes XHRs
with xhr.responseType = “blob”; ) the cache in blob_storage is not
cleared (garbage collected).

In my case, I just needed to close DevTools.

UPD. It’s happens on common webpages too.

While DevTools is opened the cache data in “blob_storage” folder from
XMLHttpRequests with xhr.responseType = “blob”; will not be garbage
collected.

Reloading of a webpage helps.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20720.html

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

相关文章

动态内存管理

malloc的简单使用 int main() {int arr[10] { 0 };//动态内存开辟int* p (int*)malloc(40);if (p NULL){printf("%s\n", strerror(errno));return 1;}//使用内存int i 0;for (i 0; i < 10; i){*(p i) i;}for (i 0; i < 10; i){printf("%d "…

(计算机毕设)基于SpringBoot+Vue的房屋租赁系统的设计与实现

博主可接毕设设计&#xff01;&#xff01;&#xff01; 各种毕业设计源码只要是你有的题目我这里都有源码 摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互…

基于AIRTEST和Jmeter、Postman的自动化测试框架

基于目前项目和团队技术升级&#xff0c;采用了UI自动化和接口自动化联动数据&#xff0c;进行相关测试活动&#xff0c;获得更好的测试质量和测试结果。

【YOLOv8改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv8中引入DA、FCA、SA、SC、SE魔改v8,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segmentation

函数指针数组,转移表

int (*arr[4])(int ,int) ,我们需要把数组名放到*的右边 函数指针数组的⽤途&#xff1a;转移表 可以让代码更加简单前提是函数类型相同 #include<stdio.h> int add(int x, int y) {return x y; } int sub(int x, int y) {return x - y; } int miv(int x, int y) {ret…

three.js加载GLTF模型

要在three.js中正确加载和显示GLTF模型&#xff0c;需要遵循一系列步骤来确保模型的纹理和材质被正确应用。以下是加载GLTF模型的基本步骤&#xff1a; 引入必要的three.js模块&#xff1a; 引入了GLTFLoader模块&#xff0c;用来加载GLTF格式模型的类。 创建加载器实例&#…

学习笔记020——Ubuntu安装jdk

本人安装的版本是1.8.0_321版本 1、下载jdk。 2、上传到自定义目录&#xff08;本人放在&#xff1a;/opt目录下&#xff09; 3、解压 sudo tar -zxvf jdk-8u321-linux-x64.tar.gz 解压过后如下&#xff1a; 4、配置环境变量&#xff1a; sudo vim /etc/profile 5、配置…

UR协作机器人二次开发环境搭建流程

UR协作机器人&#xff0c;在二次开发时需要在Linux环境下进行开发环境搭建&#xff0c;因此有两种方式对于有Linux系统的用户可以直接进行&#xff1b;而对于Windows用户而言则需要采用&#xff1b;None-Linux版本为虚拟机镜像&#xff0c;需要使用Vmbox等虚拟机软件加载。一般…

Python数据分析与可视化实验案例,所需数据已经绑定上传

大数据技术专业技能竞赛试卷 一、项目名称 农业肥料登记数据分析赛题 二、竞赛内容 赛项以大数据技术为核心内容&#xff0c;重点考查参赛选手数据清洗和数据分析的能力&#xff0c;结合Pandas和matplotlib图表展示数据。所有参赛学生在现场根据给定的项目任务&#xff0c;…

C++ 增强输入配置

创建配置文件 InputMappingContext IA_Move IA_Look InputAction IA_Move IA_Look Character.h #include "InputActionValue.h"UCLASS() class DMC_PRATICE_API ADMC_Character_Player : public ADMC_Character_Base {virtual void SetupPlayerInputComponent(cl…

Day15刷算法

110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,nul…

命令执行简单

前言&#xff1a;小迪安全2022第一节反弹shell&#xff0c;小迪用的是两台都是云服务器&#xff0c;没有服务器可以在自己的主机上搭建也是可以的&#xff0c;主机上搭两个网站 思路&#xff1a;生成一个木马文件&#xff0c;下载到本机&#xff0c;然后利用本机上传到目标主机…

爆发的AI智能体(1):学习AI智能体的计划和提纲

学习计划&#xff1a; 基础知识阶段&#xff08;1-2个月&#xff09;&#xff1a; 建立AI大模型的基础知识体系&#xff0c;包括理解AI智能体的基本概念及其与大模型&#xff08;如GPT、通义千问&#xff09;结合后的功能。学习AI智能体的关键构成&#xff0c;如大模型、规划&a…

Vue 专属状态管理库Pinia的使用与实践

目录 前言1. 什么是 Pinia&#xff1f;2. Pinia 的安装与基本配置2.1 安装 Pinia2.2 在 Vue 应用中配置 Pinia 3. 使用 Pinia 创建和管理状态3.1 定义一个简单的 Store3.2 在组件中使用 Store 4. Pinia 的高级功能4.1 使用 Getter 简化数据处理4.2 支持异步操作4.3 在服务端渲染…

springBoot插件打包部署

打包插件spring-boot-maven-plugin 不使用插件&#xff0c;运行时&#xff0c;异常信息为“没有主清单属性” 本地部署 杀进程

python使用poetry作为包管理

一、pip的弊端 由于Python使用pip安装时不会自动解决冲突&#xff0c;不会自动删除相关联的包&#xff0c;例如安装flask时&#xff0c;pip install flask会额外安装一些包&#xff0c;但是pip uninstall是不会删除相关的包&#xff0c;只会删除flask本身的包。 二、推荐使用…

神经网络中常用的激活函数(公式 + 函数图像)

激活函数是人工神经网络中的一个关键组件&#xff0c;负责引入非线性&#xff0c;从而使神经网络能够学习和表示复杂的非线性关系。没有激活函数&#xff0c;神经网络中的所有计算都是线性变换&#xff0c;而线性模型的表达能力有限&#xff0c;无法处理复杂的任务。 激活函数…

mysql复习题(实验7-8)

建立一个学生入学信息管理&#xff08;x_y&#xff09;数据库&#xff0c;设计其数据库模式为&#xff1a; 学生表&#xff08;学号&#xff0c;姓名&#xff0c;性别&#xff0c;入学成绩&#xff0c;籍贯&#xff0c;院系编号&#xff09; 院系表&#xff08;院系编号&…

n个整数后移m个位置

题目描述 有n个整数&#xff0c;使前面各数顺序向后移m个位置&#xff0c;最后m个数变成前面m个数&#xff0c;见图。写一函数&#xff1a;实现以上功能&#xff0c;在主函数中输入n个数和输出调整后的n个数。 输入描述 输入数据的个数n n个整数 移动的位置m 输出描述 移动后的…

Python——面向过程和面向对象

一.两大编程思想 面向过程&#xff1a;事情比较简单&#xff0c;可以用线性的思维去解决问题。例&#xff1a;c语言。 面向对象&#xff1a;事情比较复杂&#xff0c;使用简单的线性思维无法解决。例&#xff1a;python。 二.面向对象 1.类和对象 类和对象&#xff1a;由无…