后端返回了 xlsx 文件流,前端怎么下载处理
当后端返回一个 .xlsx
文件流时,前端可以通过 JavaScript 处理这个文件流并触发浏览器下载。
实现步骤
-
发送请求获取文件流:
使用fetch
或axios
等工具向后端发送请求,确保响应类型设置为blob
(二进制数据流)。 -
创建 Blob 对象:
将返回的文件流转换为Blob
对象,这是处理二进制数据的标准方式。 -
生成下载链接:
使用URL.createObjectURL
方法将Blob
对象转换为一个临时 URL。 -
触发下载:
动态创建一个<a>
标签,设置其href
属性为生成的临时 URL,并调用click()
方法触发下载。 -
清理资源:
下载完成后,使用URL.revokeObjectURL
释放生成的临时 URL,避免内存泄漏。
使用 axios
实现
如果你使用的是 axios
,可以这样实现:
import axios from 'axios';const downloadXlsx = async () => {try {// 发送请求并获取文件流const response = await axios.get('/api/download-xlsx', {responseType: 'blob', // 确保响应类型为 blobheaders: {'Authorization': 'Bearer your_token_here', // 如果需要携带认证信息},});// 创建 Blob 对象const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });// 创建临时 URLconst url = window.URL.createObjectURL(blob);// 创建 <a> 标签并触发下载const a = document.createElement('a');a.href = url;a.download = 'example.xlsx'; // 设置下载文件名document.body.appendChild(a); // 将 <a> 添加到 DOM 中(可选)a.click(); // 触发点击事件// 清理资源window.URL.revokeObjectURL(url);a.remove(); // 移除 <a> 标签} catch (error) {console.error('下载文件时发生错误:', error.message || '未知错误');}
};// 调用函数
downloadXlsx();
responseType: 'blob'
的含义
responseType
是 Axios 提供的一个配置选项,用于告诉 Axios 如何解析服务器返回的数据。- 当设置为
'blob'
时,表示你期望服务器返回的数据是一个二进制大对象(Binary Large Object,简称 Blob)。
Blob 是什么?
- Blob 是一种数据类型,通常用来表示不可变的、原始数据的类文件对象。
- 它可以包含文本、图像、音频、视频等二进制数据,或者混合内容。
- 在前端开发中,Blob 常用于处理文件下载、图片预览、或者将数据保存为文件。
为什么需要 responseType: 'blob'
?
当从服务器请求文件(如 Excel 文件、PDF 文件、图片等)时,服务器通常会返回二进制数据。如果直接使用默认的 responseType
(通常是 'json'
),Axios 会尝试将响应数据解析为 JSON 格式,这会导致错误或数据损坏。
通过设置 responseType: 'blob'
,你可以确保 Axios 正确地将响应数据作为二进制数据处理,而不会尝试将其解析为其他格式(如 JSON 或文本)。
代码的作用
const response = await axios({url: '/api/download-xlsx',method: 'GET',responseType: 'blob', // 指定响应数据为 Blob 类型
});
-
发起 GET 请求:
- 向
/api/download-xlsx
发起一个 GET 请求,通常用于下载文件(例如 Excel 文件)。
- 向
-
指定响应类型:
- 设置
responseType: 'blob'
,告诉 Axios 将服务器返回的数据解析为 Blob 对象。
- 设置
-
处理响应数据:
- 返回的
response.data
将是一个 Blob 对象,代表下载的文件内容。
- 返回的
使用 fetch
实现
const downloadXlsx = async () => {try {// 发送请求并获取文件流const response = await fetch('/api/download-xlsx', {method: 'GET',headers: {'Authorization': 'Bearer your_token_here', // 如果需要携带认证信息},});// 检查响应是否成功if (!response.ok) {throw new Error(`HTTP error! Status: ${response.status}`);}// 获取 blob 数据const blob = await response.blob();// 创建临时 URLconst url = window.URL.createObjectURL(blob);// 创建 <a> 标签并触发下载const a = document.createElement('a');a.href = url;a.download = 'example.xlsx'; // 设置下载文件名document.body.appendChild(a); // 将 <a> 添加到 DOM 中(可选)a.click(); // 触发点击事件// 清理资源window.URL.revokeObjectURL(url);a.remove(); // 移除 <a> 标签} catch (error) {console.error('下载文件时发生错误:', error.message || '未知错误');}
};// 调用函数
downloadXlsx();
1. 定义异步函数
javascript
深色版本
const downloadXlsx = async () => {
async
关键字表示这是一个异步函数。- 异步函数允许使用
await
来等待异步操作(如网络请求)完成。
2. 发起 HTTP 请求
const response = await fetch('/api/download-xlsx', {method: 'GET',headers: {'Authorization': 'Bearer your_token_here', // 如果需要携带认证信息},
});
-
使用
fetch
发起一个 GET 请求到/api/download-xlsx
。 -
headers
部分用于设置请求头:'Authorization'
是一个常见的请求头字段,用于传递用户的身份验证信息(如 JWT Token)。- 如果 API 不需要认证,可以省略
headers
。
3. 检查响应状态
if (!response.ok) {throw new Error(`HTTP error! Status: ${response.status}`);
}
response.ok
是一个布尔值,表示 HTTP 响应的状态码是否在 200-299 范围内。- 如果响应失败(如 404 或 500 错误),会抛出一个错误,并终止后续代码执行。
- 抛出的错误会被
catch
块捕获。
4. 获取 Blob 数据
const blob = await response.blob();
response.blob()
将响应数据解析为一个Blob
对象。- Blob 是一种二进制数据类型,通常用来表示文件内容。
await
确保在继续执行后续代码之前,blob
数据已经被完全加载。
5. 创建临时 URL
const url = window.URL.createObjectURL(blob);
window.URL.createObjectURL(blob)
创建一个指向Blob
的临时 URL。- 这个 URL 可以被用作
<a>
标签的href
属性,从而触发文件下载。
6. 创建 <a>
标签并触发下载
const a = document.createElement('a');
a.href = url;
a.download = 'example.xlsx'; // 设置下载文件名
document.body.appendChild(a); // 将 <a> 添加到 DOM 中(可选)
a.click(); // 触发点击事件
-
创建
<a>
标签:- 使用
document.createElement('a')
动态创建一个<a>
元素。
- 使用
-
设置
<a>
标签属性:href
:设置为前面生成的临时 URL。download
:指定下载文件的名称(如example.xlsx
)。
-
添加到 DOM 并触发点击:
- 将
<a>
标签添加到文档中(虽然不是必须,但某些浏览器可能需要这样做)。 - 使用
a.click()
模拟用户点击,从而触发文件下载。
- 将
7. 清理资源
window.URL.revokeObjectURL(url);
a.remove();
-
释放临时 URL:
- 使用
window.URL.revokeObjectURL(url)
释放前面创建的临时 URL,避免内存泄漏。
- 使用
-
移除
<a>
标签:- 使用
a.remove()
从 DOM 中移除<a>
标签,保持页面整洁。
- 使用
8. 错误处理
} catch (error) {console.error('下载文件时发生错误:', error.message || '未知错误');
}
catch
块 用于捕获和处理可能出现的错误。- 如果在
try
块中的任何一步发生错误(如网络问题、API 返回错误等),都会进入catch
块。 - 使用
console.error
打印错误信息,方便调试。
9. 调用函数
downloadXlsx();
- 最后调用
downloadXlsx
函数,触发整个文件下载流程。
适用场景
- 下载动态生成的文件(如 Excel 表格、PDF 文档等)。
- 需要通过 API 获取文件内容并提供给用户下载的场景。
注意事项
-
跨域问题:
- 如果 API 存在跨域限制,需要确保服务器配置了正确的 CORS(跨域资源共享)策略。
-
大文件下载:
- 对于非常大的文件,可能需要考虑分块下载或流式处理,以避免内存占用过高。
-
浏览器兼容性:
fetch
和Blob
在现代浏览器中广泛支持,但在一些老旧浏览器中可能需要使用XMLHttpRequest
替代。
关键点说明
-
设置正确的 MIME 类型:
.xlsx
文件的 MIME 类型是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
。- 如果后端未正确设置 MIME 类型,前端可以通过
Blob
的第二个参数手动指定。
-
动态文件名:
- 如果后端在响应头中提供了文件名(例如通过
Content-Disposition
),可以通过解析响应头来动态设置文件名。 - 示例:
const contentDisposition = response.headers['content-disposition']; let fileName = 'example.xlsx'; if (contentDisposition && contentDisposition.includes('filename=')) {fileName = contentDisposition.split('filename=')[1].split(';')[0]; }
- 如果后端在响应头中提供了文件名(例如通过
-
错误处理:
- 在实际开发中,务必对请求错误进行处理,例如检查 HTTP 状态码是否为 200,或者捕获网络异常。
-
兼容性:
- 上述方法适用于现代浏览器(如 Chrome、Firefox、Edge、Safari)。如果需要支持旧版浏览器,可能需要引入
FileSaver.js
库。
- 上述方法适用于现代浏览器(如 Chrome、Firefox、Edge、Safari)。如果需要支持旧版浏览器,可能需要引入
使用 FileSaver.js 简化操作
如果你希望简化文件下载逻辑,可以使用第三方库 file-saver
。安装后,只需几行代码即可完成下载。
安装
npm install file-saver
使用示例
import { saveAs } from 'file-saver';
import axios from 'axios';const downloadXlsx = async () => {try {const response = await axios({url: '/api/download-xlsx',method: 'GET',responseType: 'blob',});// 使用 FileSaver.js 保存文件saveAs(response.data, 'example.xlsx');} catch (error) {console.error('下载失败:', error);}
};// 调用函数
downloadXlsx();
总结
- 核心步骤:获取文件流 -> 转换为 Blob -> 创建临时 URL -> 触发下载 -> 清理资源。
- 推荐工具:
fetch
或axios
可以轻松获取文件流,FileSaver.js
可以进一步简化代码。 - 注意事项:确保后端返回的文件流格式正确,前端设置合适的 MIME 类型和文件名。
axios 处理
try {const response = await axios({url: '/api/download-xlsx',method: 'GET',responseType: 'blob', // 一定要注意请求时加此方法});getExportListApi(exportCarryData).then((res) => {// 创建一个a标签const link = document.createElement('a');const url = window.URL.create0bjectURL(new Blob([res.data])); link.href = url;link.setAttribute('download', exportfile);document.body.appendChild(link); link.click();// 销毁a标签document.body.removeChild(link); window.URL.revoke0bjectURL(url);message.success('导出成功!');});
相关文章:
后端返回了 xlsx 文件流,前端怎么下载处理
当后端返回一个 .xlsx 文件流时,前端可以通过 JavaScript 处理这个文件流并触发浏览器下载。 实现步骤 发送请求获取文件流: 使用 fetch 或 axios 等工具向后端发送请求,确保响应类型设置为 blob(二进制数据流)。 创建…...
js中async+await+promise的用法及常见问题总结
文章目录 概况asyncawaitPromise总结常见问题 概况 在ts/js中,async 和 await 是用于简化异步操作的关键字,一般与Promise联用(不理解Promise可以看一下这篇《JS中Promise用法(简要说明)》)。它们的核心作…...
单纯形法之大M法
1. 问题背景与标准化 在求解某些线性规划问题时,往往难以直接找到初始的基本可行解。特别是当约束中存在等式或 “≥” 类型的不等式时,我们需要引入人工变量来构造一个初始可行解。 考虑如下标准形式问题(假设为最大化问题)&am…...
一个数组分为两个sum相等的数组
vector,问是否可以拆成两部分,使其两部分的总和相同,用代码写一下 #include <iostream> #include <vector>using namespace std;bool canPartition(vector<int>& nums) {int sum 0;for (int num : nums) {sum num;…...
Socket如何实现客户端和服务器间的通信
使用Socket实现客户端和服务器间的通信 Socket是一种网络编程接口,广泛用于实现客户端和服务器之间的通信。在网络应用程序中,Socket提供了一种简单而强大的机制来建立和管理网络连接。本文将详细介绍如何使用Python的Socket模块来实现基本的客户端和服…...
崖山数据库(YashanDB)部署全流程详解
文章目录 引言 第1部分:环境准备 服务器要求 初始环境调整 第2部分:yasboot工具介绍 yasboot核心功能 yasboot进程架构 第3部分:YashanDB安装步骤 创建安装用户 目录规划 命令行安装流程 步骤1:生成配置文件 步骤2&a…...
07_JavaScript函数作用域_递归
目录 一、作用域(重点) 二、变量的使用规则 (重点) 2.1 访问规则 2.2 赋值规则 三、递归函数 (难点) 了解 四、对象 4.1 对象的创建 一、作用域(重点) 什么是作用域 ? 作用…...
基于大模型预测的初治菌阳肺结核诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、初治菌阳肺结核概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 传统诊疗方法与局限性 三、大模型在初治菌阳肺结核预测中的应用原理 3.1 大模型技术简介 3.2 数据收集与预处理 3.3 模型构建与训练 3.4 模型…...
C# Modbus TCP/IP学习记录
Modbus协议中,角色分为主站(Mater)、从站(Slave);数据类型分为线圈(Coil)、离散输入(Input)、保持寄存器(HoldingRegister)、输入寄存…...
斜线、短横、空格,三种分隔日期的优雅解析(Python | DeepSeek)
标准日期解析操作,str.replace链式如灵蛇蜿蜒,三元表达式像空灵仙家妙法。 笔记模板由python脚本于2025-03-25 22:32:24创建,本篇笔记适合三元表达式、字符串操作修习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在…...
Skynet 中 snlua 服务启动整体流程分析
前言: 在 Skynet 中,Lua 扮演了极其重要的角色。Skynet 大多数业务逻辑都跑在一个个 Lua 服务里,而能够将 Lua 环境嵌入到 Skynet 框架下,并与 Skynet 消息调度机制完美结合,正是 snlua 服务所承担的核心功能。 本文将…...
RWA代币化崛起中的香港机遇:数字金融新枢纽的破局之道
引言:全球资产代币化浪潮中的香港坐标 在2025年全球金融数字化重构的关键节点,RWA(现实世界资产代币化)市场以年均740%的增速重塑价值流动规则。香港凭借独特的政策创新、跨境枢纽优势及庞大的资产储备,正从传统金融中…...
Docker Compose介绍
基本概念 Docker-Compose是Docker官方的开源项目,负责实现对docker容器集群的快速编排。 可以这么理解,docker compose是docker提出的一个工具软件,可以管理多个docker容器组成一个应用,只需要编写一个YAML格式的配置文件docker…...
【LeetCode 题解】算法:15.三数之和
一、问题描述 在 LeetCode 上有这样一道经典的算法题,题目要求给定一个整数数组 nums,找出所有不重复的三元组 [nums[i], nums[j], nums[k]],需要满足以下两个条件: 三个元素的索引互不相同,即 i ! j,i ! …...
springboot使用阿里限流框架-sentinel
当前项目源码 控制台下载 启动bin中的看板服务:账号密码:sentinel/sentinel 官方文档地址 项目引入依赖 <!-- sentinel注解支持 --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj<…...
Ubuntu20.04系统安装IsaacSim4.5与IsaacLab环境
Introduction 今天用自己的Ubuntu20.04系统安装最新更新的IsaacSim 4.5 与 最新版的IsaacLab遇到了问题,且这个问题组里师兄之前也遇到了,我的解决方法是从头来过,所及记录一下。 IsaacSim现在支持pip安装,但是Ubuntu20.04的pip…...
【大模型】数字人 EchoMimicV2 的环境配置和使用
一、EchoMimicV2的简单介绍 EchoMimicV2是EchoMimicV1的升级版本,旨在通过音频驱动生成更加自然和流畅的半身人类动画。它能够让用户仅通过简单的音频输入,生成与声音内容相匹配的动画效果,使虚拟人物看起来更加生动。 作者:由蚂蚁…...
导入 Excel 规则批量修改或删除 PDF 文档内容
需要对 PDF 文档内容进行修改的时候,通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候,有什么方法可以帮我们实现批量操作呢?今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…...
2.Excel :快速填充和拆分重组
一 案例1:快速填充 电子邮件中包含每个人的人名,现在要提取电子邮件中的姓名到名字列。 方法1:将 Nancy 复制到单元格后,邮件会高亮,然后输入A的时候系统就会知道提取名字了。 补充:如果第三个位置输入错误…...
python tkinter 开发蓍草占卜系统
1. 项目概述 1.1 简介 蓍草占卜是中国传统的占卜方法,用于演算六十四卦。本系统通过现代编程技术,将传统的蓍草占卜方法数字化,提供一个准确、便捷的占卜工具。 蓍草占卜,作为中国古代的一种传统占卜方法,承载着深厚…...
综合小实验之电视机
综合小实验1 一、实验拓扑图 二、实验要求 按照图示配置IP地址;按照图示区域划分配置对应的动态路由协议;在R7上配置dhcp服务器,能够让pc可以获取IP地址;将所有环回⼝宣告进ospf中,将环回⼝7宣告进rip中,…...
全排列|| 分发饼干 摆动序列
1.给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]] 示例 2: 输入:nums [1,2,3] 输出:[[1,2,3…...
【开源宝藏】用 JavaScript 手写一个丝滑的打字机动画效果
你当前项目实现了一个非常丝滑的 打字机文字效果动画,使用的是自定义的 typical.js 脚本。下面我将给出一份逐步拆解的中文教程,帮你或其他初学者快速上手并自定义这个打字效果。 ✨ 最终效果 打开页面后,中央会逐字显示: Hello…...
推荐1款简洁、小巧的实用收音机软件,支持手机和电脑
聊一聊 没想到现在还有人喜欢听广播。 我一直以为听广播必须要用那种小广播机才可以。 原来手机或电脑上也是可以的。 今天给大家分享一款可以在电脑和手机上听广播的软件。 软件介绍 龙卷风收音机 电台广播收音机分电脑和手机两个版本。 电脑端无需安装,下载…...
64. MfgTool烧写工具详解
一、MfgTool工具简介 1、mfgtool是NXP官方做的向I.MX系列烧写系统的软件,运行在windows下。可以烧写uboot.imx、zImage、dtb,rootfs。通过USB烧写。 Mfgtool里面默认存放了NXP官方开发板的系统文件, 2、基本原理 向开发板烧系统分两部分&am…...
3、孪生网络/连体网络(Siamese Network)
目的: 用Siamese Network (孪生网络) 解决Few-shot learning (小样本学习)。 Siamese Network并不是Meta Learning最好的方法, 但是通过学习Siamese Network,非常有助于理解其他Meta Learning算法。 这里介绍了两种方法:Siamese Network (孪生网络)、Trplet Loss Siam…...
前端学习笔记--CSS
HTMLCSSJavaScript 》 结构 表现 交互 如何学习 1.CSS是什么 2.CSS怎么用? 3.CSS选择器(重点,难点) 4.美化网页(文字,阴影,超链接,列表,渐变。。。) 5…...
开个坑记录一下树莓派4B部署yolo的一些问题
问题一:操作系统与内核信息 这个问题困扰了我一天半,下载的时候显示的信息是aar64的系统,但是这并无意味着一个问题,那就是你的操作系统是64位的。需要采用如下的指令查看: getconf LONG_BIT 我在树莓派得出来的操作…...
1.1 结构体与类对象在List中使用区别
一、问题的起源如下的代码是错误的,无法编译通过 struct Point {public int X;public int Y; }List<Point> points new List<Point> { new Point { X 1, Y 2 } }; points[0].X 10; // 编译错误!无法修改副本的字段 二、原因分析 在C#中&…...
详细说明windows系统函数::SetUnhandledExceptionFilter(ExceptionFilter)
::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 编程中用于设置顶层未处理异常过滤器的关键 API 调用。它属于 Windows 结构化异常处理(SEH, Structured Exception Handling)机制的一部分,主要用于捕获那些未被程序内部处理的异…...
力扣刷题39. 组合总和
39. 组合总和 - 力扣(LeetCode) 需要定义一个index变量用来记录访问数组的下标,每次递归进行传参,在搜索过程中,因为为了避免重复数据,而且允许一个元素的重复出现,传入index时传入当前遍历的i…...
正弦函数的连续傅里叶变换正弦序列的DTFT
正弦序列 时域 x [ n ] sin ( ω 0 n ) x[n] \sin(\omega_0 n) x[n]sin(ω0n)频域 X ( e j ω ) j π 2 [ δ ( ω − ω 0 ) − δ ( ω ω 0 ) ] X({\rm e}^{{\rm j}\omega}) \frac{{\rm j}\pi}{2} \left[ \delta(\omega - \omega_0) - \delta(\omega \omega_0…...
winstart.wsf 病毒清理大作战
0x00 背景 发现感染了winstart.wsf 病毒如何清理。 0x01 现象 遍历Users下每个目录以及C:\和C:\Windows\Temp 2个目录写入病毒文件。 C:\Users\Administrator\AppData\Local\Temp\winstart.wsf C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Program…...
leetcode 20.有效括号
20. 有效的括号 - 力扣(LeetCode) class Solution:def isValid(self, s: str) -> bool:stack []for i in s :if i in ((,{,[ ):stack.append(i)elif i in () ):# 这种情况是 栈弹出元素为空时候 ,右半部分的括号多出来一些 比如&#x…...
Leetcode刷题笔记1 图论part07
卡码网 53 寻宝 prim算法 prim算法核心就是三步,称为prim三部曲: 第一步,选距离生成树最近节点第二步,最近节点加入生成树第三步,更新非生成树节点到生成树的距离(即更新minDist数组) def p…...
unittest自动化测试实战
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 为什么要学习unittest 按照测试阶段来划分,可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程…...
flask,示例及解释
1) from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(m1index.html)app.route(/get_type) def get_type():return ["语文", "数学"]if __name__ __main__:app.run(host0.0.0.0…...
电机倍频曲线的一些奇异特性-原因分析及应用
这里对感应电机倍频曲线的特征进行了说明,然后将其特性用于电机转差率和工况的测量。先给出可以直接利用的结论: 电机的工况和转差率谱线会体现为5x,7x谱线调制在基频附近。两条调制过携带s信息的谱线距离基频谱线的距离。 与真实转速相对同步转速的频差…...
基于Ebay拍卖网站成交价格的影响因素分析
摘要:近些年来网上拍卖的不断地发展,网上购物慢慢变成了大家普遍接受的购物方式。因此关于网上拍卖的研究日益成为很多人研究的重点。 影响拍卖网站价格的因素很多,但很少有人分得清楚哪些因素才是比较重要的因素,因此对价格因素分析&#x…...
详解图卷积网络
文章目录 GCN/RGCN图卷积网络概述--运作原理**1. GCN(Graph Convolutional Network,图卷积网络)****1.1 核心思想****1.2 公式****1.3 特点****1.4 总结** **2. RGCN(Relational Graph Convolutional Network,关系型图…...
Java 8-17核心特性全景解析之Java9、10
Java 9 核心特性解析 Java 9在2017年9月发布,带来了模块系统等重大变革,是Java平台现代化的重要一步。 模块系统 (Project Jigsaw) 特性概述 模块系统是Java 9最重要的特性,旨在解决Java平台和应用程序的可伸缩性问题,提供更好…...
mysql的学习
关系性数据库需要遵循ACID规则 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,例如转账业务中ÿ…...
leecode 560题
一、题目解析 题目如下->: 这道题的问题是,找到目标值为k的所有连续子串个数,因此最简单最容易想到的就是枚举 两个指针枚举起来确实可以解决,但是时间复杂度极大,达到了O(n^2)的级别 因此这不是我们想要的 二、解题思路 2.1 …...
借壹起航东风,中国工厂出海开启新征程
在经济全球化不断深入的当下,中国工厂正以积极的姿态投身海外市场,渴望在全球商业版图中占据一席之地,绽放独特的光彩。然而,出海之路充满了挑战与艰辛,品牌塑造困难重重、询盘量不稳定、营销成本居高不下等问题&#…...
Joomla教程—查看网站的前台页面与菜单管理(栏目管理)
原文:Joomla 查看网站的前台页面_w3cschool 在本节中,我们将简单介绍一下JOOMLA的前台界面。通过本节的介绍,希望你能对JOOMLA的界面组成有一个大致的了解。 你可以直接在浏览器中输入http://localhost/zmax/ 就会出现我们网站的首页了。也…...
HCIA-WLAN实验
1、划分VLAN,配置IP地址 2、配置AC作为AP的DHCP服务器自动为AP分配IP地址 dhcp enable interface Vlanif100 dhcp select interface 3、建立CAPWAP隧道 capwap source interface vlanif100 4、配置WLAN业务配置,下发至AP ①配置:wlan …...
DNA-PAINT
参考: 【科研教程】NUPACK网页版使用教程 https://www.bilibili.com/video/BV1G94y1W7mN/NUPACK新版网页版教程-模拟部分 https://zhuanlan.zhihu.com/p/678730568NUPACK 4.0 User Guide https://docs.nupack.org/NUPACK网页版使用指南 https://zhuanlan.zhihu.com/p/55024017…...
VS2022的第一个Qt程序——实战《加载并显示图像》
目录 一、UI设计 S1:双击Form Files下.ui文件,进入ui设计界面Qt Designer S2:然后拖动一个Push Button和Label控件到界面 S3:点击信号与槽,然后点击PushButton往外拉一下 S4:松开鼠标进入配置连接界面…...
从概率到梯度:理解分类问题中交叉熵的优越性
分类问题一般使用交叉熵(Cross-Entropy)而不是平方损失(Square Loss)函数1. **概率解释**2. **梯度性质**3. **对错误的惩罚**4. **计算复杂度**5. **总结** 分类问题一般使用交叉熵(Cross-Entropy)而不是平…...
如何选择?Postman vs JMeter 对比介绍
Postman 和 JMeter 作为两款主流测试工具,各有特色。本文将从多个维度详细对比这两款工具最新特性和应用场景。 工具基本介绍 对比项 Postman JMeter 类型 API 开发和测试工具 性能测试工具 开源情况 闭源,提供免费版 开源(Apache L…...