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

记录一次vue项目页面内嵌iframe页面实现跨域上传和下载附件的功能

功能背景:项目部署在外网,然后其中有一个功能需要上传下载附件,附件是上传到华为云对象存储服务OBS中(私有云),所以采用iframe嵌套页面的方式解决跨域问题。
实现思路:
1、父窗口封装一个组件专门用于处理iframe相关功能
2、子窗口是另外一个项目,封装了附件上传、下载、删除等功能
3、父窗口通过监听组件绑定的value值,不断轮询去问子窗口是否已经挂载完毕了,如果已经挂载了,就将接口返回的附件列表发送给子窗口进行展示
4、子窗口挂载完毕后主动告知父窗口已经挂载好了,可以接收消息了。子窗口接收到了附件列表后进行展示,上传成功、删除成功后子窗口都需要发送消息给父窗口,告知附件列表发生了改变
5、父窗口是vue2语法写的,子窗口是vue3写的,可自行更改。

父窗口(vue2语法)

<template><div><iframe id="modle_iframe" ref="modle_iframe" frameborder="no" border="0"style="width:100%;height:calc(100vh - 450px);" :src="`https://xxxxx:8443/rcxjsp`"></iframe></div>
</template><script>
/*** @Date 2025-05-14* @Description 视频上传组件*/
export default {props: {value: {     //附件列表type: Array,default: () => { return [] }},disabled: {      //是否只读type: Boolean,default: false}},data() {return {fileList: [],isIframeLoaded: false,  //标记iframe是否加载完成timer: null}},watch: {value: {immediate: true,handler(newValue, oldValue) {if (newValue && newValue.length > 0) {this.fileList = newValue;} else {this.fileList = [];}this.loop();}},},mounted() {window.addEventListener('message', this.getMessage);},beforeDestroy() {window.removeEventListener('message', this.getMessage);if (this.timer) {clearInterval(this.timer);}},methods: {//不断询问子窗口是否已经挂载完毕,只有挂载完毕后发送消息,子窗口才能接收到loop() {if (this.timer) {clearInterval(this.timer);}this.timer = setInterval(() => {if (this.isIframeLoaded) {this.sendMessage();}}, 100)},sendMessage() {if (this.timer) {clearInterval(this.timer);}const iframe = document.getElementById('modle_iframe');const data = {disabled: this.disabled,fileList: this.fileList,}const msg = JSON.stringify(data);//父窗口发送列表和是否只读给子窗口iframe.contentWindow.postMessage(msg, '*');},getMessage(event) {    //父窗口接收来自子窗口的消息const data = JSON.parse(event.data);if (data.type === 'onMounted') {this.isIframeLoaded = true;} else if (data.type == 'updateFileList') {this.fileList = data.fileList;this.$emit('input', this.fileList);}},}
}
</script><style lang="scss" scoped></style>

子窗口(vue3+element-plus)

这里的上传和下载都是采用的分片上传和分片下载实现的。这里只提供核心代码,有用得上的自行修改。

<template><div style="overflow-y: auto;"><el-upload v-if="!disabled" action="#" :file-list="fileList" :data="{ path: 'rcxjsp' }" :show-file-list="false":http-request="uploadRequest"><el-button type="primary" :loading="loading" style="margin-bottom: 10px;">点击上传</el-button></el-upload><!-- 文件列表 --><div v-for="(item, index) in fileList" :key="index" class="fileList" style="display: flex;"><img src="./images/pdf.png" mode="" v-if="fileHz(item) == 'pdf'"> </img><img src="./images/zip.png" mode="" v-else-if="fileHz(item) == 'zip' || fileHz(item) == 'rar'"></img><img src="./images/txt.png" mode="" v-else-if="fileHz(item) == 'txt'"></img><img src="./images/ppt.png" mode="" v-else-if="fileHz(item) == 'ppt'"></img><img src="./images/xls.png" mode="" v-else-if="fileHz(item) == 'xls' || fileHz(item) == 'xlsx'"></img><img src="./images/doc.png" mode="" v-else-if="fileHz(item) == 'doc' || fileHz(item) == 'docx'"></img><img src="./images/mp3.png" mode=""v-else-if="fileHz(item) == 'mp3' || fileHz(item) == 'wav' || fileHz(item) == 'wma'"></img><img src="./images/mp4.png" mode=""v-else-if="fileHz(item) == 'mp4' || fileHz(item) == 'avi' || fileHz(item) == 'mov'"></img><img src="./images/fj.png" mode="" v-else></img><div class="filename">{{ item.fileName || item.name }}</div><el-button type="primary" @click="fpDown(item, index)" class="yulan":loading="downloading[index].loading">{{ downloading[index].loading ?`正在下载(${downloading[index].percent}%)` : '下载' }}</el-button><el-button type="danger" @click.stop="handleDelete(index)" v-show="!disabled">删除</el-button></div><el-progress v-show="showProgress" :percentage="progressPercent"></el-progress></div>
</template><script setup>
/*** @Date 2025-05-13* @Description 视频上传下载*/
import { initializeUploadId, uploadChunk, completeUpload, rangeDownload } from '@/api/rcxjsp';//父组件发送过来的两个参数
const fileList = ref([]);
const disabled = ref(false);
//本组件需要使用到的变量
let loading = ref(false);
let downloading = ref([]); // 下载进度
let currentFile = ref({}); // 当前文件
let showProgress = ref(false); // 进度条
let progressPercent = ref(0); // 进度百分比
const path = 'rcxjsp'; // 上传路径onMounted(() => {//页面挂载后主动通知父窗口已经准备好了window.parent.postMessage(JSON.stringify({ type: 'onMounted' }), '*');window.addEventListener('message', getMessage);
});
onUnmounted(() => {window.removeEventListener('message', getMessage);
});
const getMessage = (event) => {if (event.source === window.parent) {const data = JSON.parse(event.data);disabled.value = data.disabled;fileList.value = data.fileList;downloading.value = new Array(fileList.value.length).fill({ loading: false, percent: 0 });}
}
//获取文件后缀名
const fileHz = (file) => {const name = file.fileName || file.name;if (name) {var index = name.lastIndexOf(".");var ext = name.substr(index + 1);return ext}
}
//上传附件
const uploadRequest = (params) => {currentFile.value.fileName = params.file.name;showProgress.value = true;loading.value = true;let formdata = new FormData();formdata.append('file', params.file);formdata.append('path', path);formdata.append('fileName', params.file.name);initializeUploadId({ fileName: params.file.name, path: path }).then(res => {currentFile.value = res.data;const chunkSize = 1024 * 1024 * 25; // 每个切片的大小(这里设置为25MB)const totalChunks = Math.ceil(params.file.size / chunkSize);let currentChunk = 0;const uploadNextChunk = () => {const start = currentChunk * chunkSize;const end = Math.min((currentChunk + 1) * chunkSize, params.file.size);let chunkData = params.file.slice(start, end);let formdata = new FormData();formdata.append('file', chunkData);formdata.append('uploadId', currentFile.value.uploadId);formdata.append('objectKey', currentFile.value.objectKey);formdata.append('chunkIndex', currentChunk + 1);uploadChunk(formdata).then(res => {currentChunk++;progressPercent.value = +Math.floor((currentChunk / totalChunks) * 100).toFixed(0);if (currentChunk < totalChunks) {uploadNextChunk();} else {// 所有切片上传完成,将切片合并progressPercent.value = 100;complete();}}).catch((error) => {ElMessage({ type: 'error', message: '切片上传失败!' });loading.value = false;showProgress.value = false;progressPercent.value = 0;});};uploadNextChunk();})
}
//合并切片
const complete = () => {completeUpload({ ...currentFile.value }).then(res => {//定义需要传输给父窗口的附件列表数据结构let fileitem = {name: res.data.fileName,fileName: res.data.fileName,url: res.data.fileUrl,fileUrl: res.data.fileUrl,fileLength: res.data.fileLength}fileList.value.push(fileitem)downloading.value.push({ loading: false, percent: 0 });//通知父窗口附件列表变化了sendMsgToParent();}).catch(() => {ElMessage({ type: 'error', message: '切片合并失败!' });}).finally(() => {loading.value = false;showProgress.value = false;progressPercent.value = 0;})
}
//删除文件
const handleDelete = (index) => {fileList.value.splice(index, 1);//通知父窗口附件列表变化了sendMsgToParent();
}
//分片下载
const fpDown = (e, index) => {   //分片下载同步下载(按顺序一个一个下载)downloading.value.splice(index, 1, { loading: true, percent: 0 });const chunkSize = 1024 * 1024 * 25; // 每个切片的大小(这里设置为25MB)const totalChunks = Math.ceil(e.fileLength / chunkSize);let currentChunk = 0;const chunks = [];const download = () => {const start = currentChunk * chunkSize;const end = Math.min((currentChunk + 1) * chunkSize, e.fileLength);rangeDownload({ fileName: e.fileName, start: start, end: end, fileLength: e.fileLength }).then(bolb => {currentChunk++;let percent = +Math.floor((currentChunk / totalChunks) * 100).toFixed(0);downloading.value.splice(index, 1, { loading: true, percent: percent });chunks.push(bolb);if (currentChunk < totalChunks) {download();} else {downloading.value.splice(index, 1, { loading: false, percent: 100 });const mergedBlob = new Blob(chunks);const downloadUrl = window.URL.createObjectURL(mergedBlob);const link = document.createElement('a');link.href = downloadUrl;link.setAttribute('download', e.fileName);link.click();window.URL.revokeObjectURL(downloadUrl);}}).catch((error) => {ElMessage({ type: 'error', message: '切片下载失败!' });downloading.value.splice(index, 1, { loading: false, percent: 0 });});}download();
}//通知父窗口文件列表改变
const sendMsgToParent = () => {const msg = {type: 'updateFileList',fileList: fileList.value}window.parent.postMessage(JSON.stringify(msg), '*');
}</script><style lang="scss" scoped>
.fileList {display: flex;align-items: center;margin-bottom: 10px;img,.el-image {width: 30px;height: 30px;margin-right: 10px;}div.filename {flex: 1;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}el-button.yulan {margin-left: 10px;}el-button.delete {margin-left: 10px;}
}
</style>

接口rcxjsp.js大致如下:

import request from '@/utils/request'//获取uploadid
export function initializeUploadId(params) {return request({url: '/xxxxx',method: 'get',params,})
}//上传分片
export function uploadChunk(data) {return request({headers: {'Content-Type': 'multipart/form-data',},url: '/gtfrgftft',method: 'post',data,})
}//合并分片
export function completeUpload(data) {return request({url: '/thgthtgh',method: 'post',data,})
}//下载附件
export function download(params) {return request({url: '/wrderfefre',method: 'get',params,responseType: 'blob',})
}//分片下载
export function rangeDownload(params) {return request({url: 'kuju',method: 'get',params,responseType: 'blob',})
}

相关文章:

记录一次vue项目页面内嵌iframe页面实现跨域上传和下载附件的功能

功能背景&#xff1a;项目部署在外网&#xff0c;然后其中有一个功能需要上传下载附件&#xff0c;附件是上传到华为云对象存储服务OBS中&#xff08;私有云&#xff09;&#xff0c;所以采用iframe嵌套页面的方式解决跨域问题。 实现思路&#xff1a; 1、父窗口封装一个组件专…...

【Win32 API】 lstrcpyA()

作用 将字符串复制到指定的字符串缓冲区。 函数 LPSTR lstrcpyA(LPSTR lpString1, LPCSTR lpString2); 参数 lpString1 类型&#xff1a;LPTSTR 一个缓冲区&#xff0c;用于接收由 lpString2 参数指向的字符串的内容。 缓冲区必须足够大才能包含字符串&#xff0c;包括终止…...

报表控件stimulsoft教程:如何在报表和仪表板中创建热图

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…...

Axure疑难杂症:剖析面包屑导航“用户不迷路”(玩转导航)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:剖析面包屑导航“用户不迷路” 主要内容:面包屑导航各种做法 应用场景:页面导航、页面路径、用户选择路径、…...

中exec()函数因$imagePath参数导致的命令注入漏洞

exec(zbarimg -q . $imagePath, $barcodeList, $returnVar); 针对PHP中exec()函数因$imagePath参数导致的命令注入漏洞&#xff0c;以下是安全解决方案和最佳实践&#xff1a; 一、漏洞原理分析 直接拼接用户输入$imagePath到系统命令中&#xff0c;攻击者可通过注入特殊字…...

HTML常用标签用法全解析:构建语义化网页的核心指南

HTML作为网页开发的基石&#xff0c;其标签的合理使用直接影响页面的可读性、SEO效果及维护性。本文系统梳理HTML核心标签的用法&#xff0c;结合语义化设计原则与实战示例&#xff0c;助你构建规范、高效的网页结构。 一、基础结构与排版标签 1.1 文档结构 <!DOCTYPE htm…...

【Linux】动静态库链接原理

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux——动静态库链接原理 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C语言入门基础…...

Axure设计的“广东省网络信息化大数据平台”数据可视化大屏

在数据驱动决策的时代&#xff0c;数据可视化大屏成为了展示数据、洞察趋势的重要工具。今天&#xff0c;让我们一同深入了解由Axure设计的“广东省网络信息化大数据平台”数据可视化大屏&#xff0c;看看它如何通过精心的布局和丰富的图表类型&#xff0c;将复杂的数据以直观易…...

linux安装宝塔面板到数据盘

操作很简单&#xff0c;假如数据盘挂载在cipan1&#xff0c;在数据盘新建目录www&#xff0c;为了方便对应。 执行一下命令&#xff0c;创建软连接 ln -s /cipan1/www www 此时&#xff0c;根目录就出现了www文件夹 下面正常安装宝塔即可...

数学实验(Matlab编程基础)

一、函数文件 Matlab编程基础 Matlab作为一种广泛应用于科学计算的工具软件&#xff0c;不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能&#xff0c;同时也具有和C、FORTRAN等高级语言一样进行程序设计 利用Matlab的程序控制功能&#xff0c;可以将有关Ma…...

不同坐标系下MATLAB绘制阵列的方向图

不同坐标系下MATLAB绘制阵列的方向图 球坐标系&#xff0c;极坐标系、直角坐标系 文章目录 前言一、极坐标系二、球坐标系三、直角坐标系总结 前言 \;\;\;\;\; 在阵列信号处理和天线设计中&#xff0c;方向图&#xff08;Pattern&#xff09;是描述波束形成性能的关键工具&…...

python可视化:北方省市人口流动与春运数据综合分析5

python可视化&#xff1a;北方省市人口流动与春运数据综合分析5 一、北方省市常住人口数据及变化趋势&#xff08;2023-2024第一季度&#xff09; 1. 主要城市常住人口数据&#xff08;按城市等级分类&#xff09; 城市类型2023Q1常住人口(万)2024Q1常住人口(万)变化量(万)变…...

Java并发编程-线程池(四)

文章目录 线程池实现原理WorkerWorker 核心设计总结 runWorker(Worker w)总结 线程池实现原理 上一篇我们看了 addWork 方法&#xff0c;那接下来就让我们详细看看内部类Worker。 Worker private final class Workerextends AbstractQueuedSynchronizerimplements Runnable …...

力扣热题——最长相邻不相等子序列 |

题目要求从字符串数组 words 中选出一个最长的子序列&#xff0c;使得该子序列中相邻字符串对应的 groups 数组中的值不同。通过贪心算法&#xff0c;可以高效地解决该问题。具体步骤为&#xff1a;初始化一个结果列表&#xff0c;遍历 words 数组&#xff0c;检查当前字符串的…...

筑牢信息安全防线:涉密计算机与互联网隔离的理论实践与风险防控

在数字化时代&#xff0c;信息安全已成为国家安全体系的重要组成部分。涉密计算机作为承载敏感信息的核心载体&#xff0c;其安全防护工作直接关系到国家利益与社会稳定。违规连接互联网这一行为&#xff0c;如同在严密的防护体系中打开一扇危险的"暗门"&#xff0c;…...

sqli-labs靶场29-31关(http参数污染)

目录 前言 less29&#xff08;单引号http参数污染&#xff09; less30&#xff08;双引号http参数污染&#xff09; less31(双引号括号http参数污染) 前言 在JSP中&#xff0c;使用request.getParameter("id")获取请求参数时&#xff0c;如果存在多个同名参数&a…...

基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL

基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL 场景说明&#xff1a; 先有项目需要读取生产库数据&#xff0c;但是不能直接读取生产库数据&#xff0c;需要把生产数据同步到一个中间库&#xff0c;下游系统从中间库读取数据。 生产库mysql - OGG - 中间库…...

linux,我启动一个springboot项目, 用java -jar xxx.jar ,但是没多久这个java进程就会自动关掉

当使用 java -jar xxx.jar & 启动 Spring Boot 项目后进程自动关闭时&#xff0c;可能由多种原因导致。以下是常见排查步骤和解决方案&#xff1a; 一、查看日志定位原因 进程异常关闭通常会在控制台或日志中留下线索&#xff0c;建议先获取完整日志&#xff1a; 1. 查看…...

pytorch 14.3 Batch Normalization综合调参实践

文章目录 一、Batch Normalization与Batch_size综合调参二、复杂模型上的Batch_normalization表现1、BN对复杂模型&#xff08;sigmoid&#xff09;的影响2、模型复杂度对模型效果的影响3、BN对复杂模型&#xff08;tanh&#xff09;的影响 三、包含BN层的神经网络的学习率优化…...

供应链安全检测系列技术规范介绍之一|软件成分分析

软件成分分析的概念及意义 软件成分分析Software Compostition Analysis&#xff08;SCA&#xff09;是一种用于管理开源组件应用安全的方法。软件成分分析系统可以快速跟踪和分析应用软件的开源组件&#xff0c;发现相关组件、支持库以及它们之间直接和间接依赖关系&#xff0…...

pytorch 15.1 学习率调度基本概念与手动实现方法

文章目录 一、学习率对模型训练影响 二、学习率调度基本概念与手动实现方法1.模型调度基本概念2.手动实现学习率调度3.常用学习率调度思路 从本节开始&#xff0c;我们将介绍深度学习中学习率优化方法。学习率作为模型优化的重要超参数&#xff0c;在此前的学习中&#xff0c;我…...

c++ 类的语法4

测试析构函数、虚函数、纯虚函数&#xff1a; void testClass5() {class Parent {public:Parent(int x) { cout << "Parent构造: " << x << endl; }~Parent() {cout << "调用Parent析构函数" << endl;}virtual string toSt…...

品铂科技在UWB行业地位综述(2025年更新)

一、行业领先地位‌ ‌国内UWB领域头部企业‌ 在2025年中国UWB企业综合实力排行榜中位列第一&#xff0c;技术研发、市场份额及行业影响力均处于领先地位。连续多年获评中国物联网产业联盟“中国最有影响力物联网定位企业”。 2.‌全球技术竞争力‌ .2016年IPSN微软国际室内…...

muduo库EventLoop模块详解

muduo库EventLoop模块深度解析 EventLoop是muduo网络库实现Reactor模型的核心调度中枢&#xff0c;负责驱动整个事件循环机制&#xff0c;协调Poller、Channel、TimerQueue等组件的工作。其设计遵循"One Loop Per Thread"原则。 一、核心职责与设计思想 1. 核心职责…...

循环导入(Circular Import) 错误

ImportError: cannot import name event_type_data_tree from partially initialized module routers.ticket (most likely due to a circular import) (E:\ai12345\backend\app\routers\ticket.py) 这是什么错&#xff0c;中文回答 这个错误是 循环导入&#xff08;Circular …...

基于大数据的租房信息可视化系统的设计与实现【源码+文档+部署】

课题名称 基于大数据的租房信息可视化系统的设计与实现 学 院 专 业 计算机科学与技术 学生姓名 指导教师 一、课题来源及意义 租房市场一直是社会关注的热点问题。随着城市化进程的加速&#xff0c;大量人口涌入城市&#xff0c;导致租房需求激增。传统的租…...

奥运数据可视化:探索数据讲述奥运故事

在数据可视化的世界里&#xff0c;体育数据因其丰富的历史和文化意义&#xff0c;常常成为最有吸引力的主题之一。今天我要分享一个令人着迷的奥运数据可视化项目&#xff0c;它巧妙地利用交互式图表和动态动画&#xff0c;展现了自1896年至今奥运会的发展历程和各国奥运成就的…...

linux环境下 安装svn并且创建svn版本库详细教程

​一、安装SVN​ ​通过yum安装Subversion​ 在Linux系统中执行以下命令安装&#xff1a; yum install subversion -y 安装完成后&#xff0c;验证版本&#xff1a; svnserve --version ​二、创建版本库 ​选择存储路径并创建目录​ 通常将版本库放在/var/svn或/usr/local/…...

STM32控制电机

初始化时钟&#xff1a;在 STM32 的程序中&#xff0c;初始化系统时钟&#xff0c;一般会使用 RCC&#xff08;Reset and Clock Control&#xff09;相关函数来配置时钟。例如&#xff0c;对于 STM32F103 系列&#xff0c;可能会使用 RCC_APB2PeriphClockCmd 函数来使能 GPIO 和…...

Ubuntu 更改 Nginx 版本

将 1.25 降为 1.18 先卸载干净 # 1. 完全卸载当前Nginx sudo apt purge nginx nginx-common nginx-core# 2. 清理残留配置 sudo apt autoremove sudo rm -rf /etc/apt/sources.list.d/nginx*.list修改仓库地址 # 添加仓库&#xff08;通用稳定版仓库&#xff09; codename$(…...

微服务初步学习

系统架构演变过程 一、单体架构 前后端都在一个项目中&#xff0c;包括我们现在的前后端分离开发&#xff0c;都可以看作是一个单体项目。 二、集群架构 把一个服务部署多次&#xff0c;可以解决服务不够的问题&#xff0c;但是有些不必要的功能也跟着部署多次。 三、垂直架…...

旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑

踩坑 参考nvkind教程安装到Setup这一步&#xff0c;由于docker版本较旧&#xff0c;–cdi.enabled 和 config 参数执行不了 手动修改 /etc/docker/daemon.json 配置文件 "features": {"cdi": true}手动修改 /etc/nvidia-container-runtime/config.toml 配…...

Fabric 服务端插件开发简述与聊天事件监听转发

原文链接&#xff1a;Fabric 服务端插件开发简述与聊天事件监听转发 < Ping通途说 0. 引言 以前写过Spigot的插件&#xff0c;非常简单&#xff0c;仅需调用官方封装好的Event类即可。但Fabric这边在开发时由于官方文档和现有互联网资料来看&#xff0c;可能会具有一定的误…...

Wise Disk Cleaner:免费系统清理工具,释放空间,提升性能

Wise Disk Cleaner是一款功能强大且完全免费的系统清理工具&#xff0c;专为帮助用户清理系统中的无用文件和垃圾文件而设计。它能够有效释放磁盘空间&#xff0c;提高系统运行速度&#xff0c;确保电脑始终保持最佳性能。无论是日常维护还是深度清理&#xff0c;Wise Disk Cle…...

排序算法之高效排序:快速排序,归并排序,堆排序详解

排序算法之高效排序&#xff1a;快速排序、归并排序、堆排序详解 前言一、快速排序&#xff08;Quick Sort&#xff09;1.1 算法原理1.2 代码实现&#xff08;Python&#xff09;1.3 性能分析 二、归并排序&#xff08;Merge Sort&#xff09;2.1 算法原理2.2 代码实现&#xf…...

主打「反激进」的一汽丰田,靠稳扎稳打的技术实现突围

文/王俣祺 导语&#xff1a;今年的上海车展&#xff0c;当新势力都在用“1000TOPS算力”“激光雷达矩阵”等参数堆砌着一个个技术神话的时候&#xff0c;一汽丰田却选择了一条不同的路——用“反激进”的技术哲学&#xff0c;在电动化和智能化的大风向中&#xff0c;构建独特的…...

变量赋值和数据类型

对象 Python是面相对象的编程语言&#xff0c;在Python一些都是对象&#xff0c;对象由标识、类型、值三部分组成&#xff0c;本质上来讲&#xff0c;系统分配一块内存&#xff0c;这块内存中存储了特定了的值&#xff0c;还支持特定类型的相关操作。 标识&#xff1a;即对象…...

【笔记】cri-docker.service和containerd

cri-docker.service 和 containerd 都是 Kubernetes 支持的容器运行时组件&#xff0c;但它们的架构、功能定位及与 Docker 的关系有显著差异。以下是它们的核心区别和关联&#xff1a; 1. 功能定位 组件核心角色是否直接支持 CRIcontainerd轻量级容器运行时&#xff0c;直接管…...

技术文章:解决汇川MD500系列变频器干扰问题——GRJ9000S EMC滤波器的应用

1. 引言 汇川MD500系列变频器&#xff08;Variable Frequency Drive, VFD&#xff09;以其高性能、宽功率范围&#xff08;0.4kW-500kW&#xff09;和灵活的控制方式&#xff0c;广泛应用于工业自动化领域&#xff0c;如风机、水泵、传送带和压缩机等。然而&#xff0c;MD500系…...

频域中的反射-信号完整性分析

频域中的反射: 频域与时域的桥梁是傅里叶变换,一个周期信号可以拆分为许多个正弦波。所谓从频域中看信号,看到的可以是很多个频域中的点,也可以是许多个正弦波。 所以在大家眼中看到的信号如图4-13所示。我们可以将该信号分解为图4-14所示信号。 让我们来思考下面这个问题:…...

window nvidia-smi命令 Failed to initialize NVML: Unknown Error

如果驱动目录下的可以执行&#xff0c;那可能版本原因 "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"复制"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"替换 C:\Windows\System32\nvidia-smi.exe 或者 把C:\Windows\System3…...

ubuntu 20.04 更改国内镜像源-阿里源 确保可用

镜像源是跟linux版本一一对应的,查询自己系统的版本号&#xff1a; 命令&#xff1a;lsb_release -a macw:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal macw:~$…...

Elasticsearch 学习(一)如何在Linux 系统中下载、安装

目录 一、Elasticsearch 下载二、使用 yum、dnf、zypper 命令下载安装三、使用 Docker 本地快速启动安装&#xff08;ESKibana&#xff09;【测试推荐】3.1 介绍3.2 下载、安装、启动3.3 访问3.4 修改配置&#xff0c;支持ip访问 官网地址&#xff1a; https://www.elastic.co/…...

PYTHON训练营DAY27

装饰器 编写一个装饰器 logger&#xff0c;在函数执行前后打印日志信息&#xff08;如函数名、参数、返回值&#xff09; logger def multiply(a, b):return a * bmultiply(2, 3) # 输出: # 开始执行函数 multiply&#xff0c;参数: (2, 3), {} # 函数 multiply 执行完毕&a…...

Shell脚本日志输出完整指南(AI)

一、基础日志输出方法 1. 标准输出与错误重定向 在Shell脚本中&#xff0c;可以使用重定向操作符将命令输出记录到日志文件&#xff1a; >&#xff1a;覆盖写入文件>>&#xff1a;追加写入文件2>&#xff1a;重定向错误输出&>&#xff1a;同时重定向标准…...

node.js文件系统(fs) - 创建文件、打开文件、写入数据、追加数据、读取数据、创建目录、删除目录

注意&#xff1a;以下所有示例均是异步语法&#xff01; 注意&#xff1a;以下所有示例均是异步语法&#xff01; 创建文件 node.js 允许我们在计算机本地创建文件&#xff0c;例如创建一个 word 文件&#xff1a; // 引入核心模块(fs) var fs require(fs)// API fs.writeF…...

关于如何本地启动xxl-job,并且整合SpringBoot

1. 本地安装xxl-job并启动 拉取xxl-job的代码 git clone gitgithub.com:xuxueli/xxl-job.git配置xxl-job数据库 拉取代码后&#xff0c;代码的doc/db目录下有官方配置好的sql脚本&#xff0c;执行里面的sql脚本至本地数据库 3. 修改xxl-job默认的数据库配置 spring.dataso…...

基于Unity的简单2D游戏开发

基于Unity的简单2D游戏开发 摘要 本文围绕基于Unity的简单2D游戏开发进行深入探讨,旨在分析其开发过程中的技术架构与实现策略。通过文献综述与市场分析,研究发现,近年来Unity引擎因其优秀的跨平台特性及可视化编程理念,成为2D游戏开发的主要工具。文章首先梳理了游戏开发的…...

在服务器上安装AlphaFold2遇到的问题(3)_cat: /usr/include/cudnn_version.h: 没有那个文件或目录

[rootlocalhost ~]# cat /usr/include/cudnn_version.h cat: /usr/include/cudnn_version.h: 没有那个文件或目录这个错误表明系统找不到 cudnn_version.h 头文件&#xff0c;说明 cuDNN 的开发文件&#xff08;头文件&#xff09;没有正确安装。以下是完整的解决方案&#xff…...

Java生产环境设限参数教学

哈哈&#xff0c;这个问题问得好&#xff01;咱们用开餐厅的比喻来理解生产环境的四大必须设限参数&#xff0c;保证你听完再也不会忘&#xff01;&#xff08;搓手手&#xff09; 1. 堆内存上限&#xff1a;-Xmx&#xff08;厨房的最大容量&#xff09; 问题&#xff1a;想象…...