js 中 file 文件 应用
文章目录
- 文件上传
- File 对象基本属性
- 文件上传
- 大文件上传
- 文件格式校验
- 通过 type 属性校验图片格式
- 通过文件名扩展名校验
- 文件解析
- 一、处理图片文件流(以 `Blob` 格式接收文件流为例)
- 二、处理文本文件流
- 三、处理 PDF 文件流(借助 PDF.js 库来展示,需先引入 PDF.js 相关脚本)
- base64 读取及转换
- 方法一:通过`FileReader`读取本地图片文件转换为Base64
- 方法二:获取页面上已存在图片元素并转换为Base64
文件上传
以下是关于前端 File
对象的基本属性、文件上传、大文件上传以及格式校验的相关内容及实例:
File 对象基本属性
在前端,当用户通过 <input type="file">
元素选择文件后,可以获取到对应的 File
对象,它包含了诸多有用的属性:
name
:表示文件名,包含文件的扩展名,例如"example.jpg"
。size
:以字节为单位返回文件的大小,比如一个 500KB 的文件,其size
值大约就是 500 * 1024 字节(因为 1KB = 1024 字节)。type
:返回文件的 MIME 类型,像图片文件常见的有"image/jpeg"
(JPEG 图片)、"image/png"
(PNG 图片),文本文件可能是"text/plain"
等。lastModified
:返回文件最后修改时间的时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 到文件最后修改时间的毫秒数)。
示例代码,获取文件的基本属性:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><input type="file" id="fileInput"><button onclick="getFileInfo()">获取文件信息</button><script>function getFileInfo() {const fileInput = document.getElementById('fileInput');const file = fileInput.files[0];if (file) {console.log('文件名:', file.name);console.log('文件大小:', file.size, '字节');console.log('文件类型:', file.type);console.log('最后修改时间:', new Date(file.lastModified).toLocaleString());}}</script>
</body></html>
文件上传
通常是将用户选择的文件发送到后端服务器进行保存或进一步处理,基本步骤如下:
- 创建
FormData
对象:用于模拟表单数据,方便将文件数据和其他可能的额外数据(比如文件名、描述等额外字段)一起发送。 - 添加文件到
FormData
:把通过<input type="file">
获取到的File
对象添加进去。 - 发起
XMLHttpRequest
或使用fetch
API 发送请求:将包含文件的FormData
发送到后端指定的接口。
以下是使用 fetch
API 的示例,假设后端接口地址为 "/upload"
:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><input type="file" id="fileInput"><button onclick="uploadFile()">上传文件</button><script>async function uploadFile() {const fileInput = document.getElementById('fileInput');const file = fileInput.files[0];if (file) {const formData = new FormData();formData.append('file', file);try {const response = await fetch('/upload', {method: 'POST',body: formData});const result = await response.json();console.log(result);} catch (error) {console.error('上传出错:', error);}}}</script>
</body></html>
大文件上传
大文件上传需要考虑到避免一次性将整个大文件读入内存,防止浏览器内存溢出等问题,常见的做法是采用切片上传,步骤大致如下:
- 将大文件进行切片:按照一定的大小(比如每片 1MB 或者其他合适的大小)把文件切割成多个小的文件片段。
- 为每个切片标记顺序等信息:方便后端接收后能正确地将切片组合还原成完整文件,例如可以给每个切片添加序号字段。
- 依次上传切片:逐个将切片发送到后端,一般可以通过循环和记录上传进度等机制来实现。
- 后端处理切片并合并还原文件:后端接收到切片后,按照约定的顺序等规则将它们合并成原始的大文件。
以下是一个简单的大文件切片上传的前端示例(仅示意切片部分和简单的上传逻辑,完整功能还需结合后端完善),假设切片大小设为 1MB(1024 * 1024 字节):
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><input type="file" id="bigFileInput"><button onclick="uploadBigFile()">上传大文件</button><script>function uploadBigFile() {const fileInput = document.getElementById('bigFileInput');const file = fileInput.files[0];if (file) {const chunkSize = 1024 * 1024; // 1MB 切片大小const chunks = [];let start = 0;while (start < file.size) {const end = Math.min(start + chunkSize, file.size);const chunk = file.slice(start, end);chunks.push(chunk);start = end;}// 此处可以添加代码来逐个上传切片,比如通过循环调用上传函数,并且处理进度等情况console.log('文件已切片,共', chunks.length, '个切片');}}</script>
</body></html>
文件格式校验
可以通过 File
对象的 type
属性或者文件扩展名来校验文件格式是否符合要求,以下是几种常见的校验方式示例:
通过 type 属性校验图片格式
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><input type="file" id="imageFileInput"><button onclick="checkImageFormat()">校验图片格式</button><script>function checkImageFormat() {const fileInput = document.getElementById('imageFileInput');const file = fileInput.files[0];if (file) {const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];if (allowedTypes.includes(file.type)) {console.log('图片格式符合要求');} else {console.log('图片格式不符合要求');}}}</script>
</body></html>
通过文件名扩展名校验
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><input type="file" id="fileInputForExtensionCheck"><button onclick="checkFileExtension()">校验文件扩展名</button><script>function checkFileExtension() {const fileInput = document.getElementById('fileInputForExtensionCheck');const file = fileInput.files[0];if (file) {const fileName = file.name;const allowedExtensions = ['.jpg', '.png', '.txt'];const fileExtension = fileName.substring(fileName.lastIndexOf('.'));if (allowedExtensions.includes(fileExtension.toLowerCase())) {console.log('文件扩展名符合要求');} else {console.log('文件扩展名不符合要求');}}}</script>
</body></html>
上述示例展示了前端 File
对象相关操作的基础实现,实际应用中,根据具体的业务需求和后端配合情况,还需要进一步完善逻辑、处理错误以及优化用户体验等。
文件解析
以下是几种前端对后端返回的文件流进行解码显示的常见实例,分别针对不同类型的文件(图片、文本文件等)进行说明:
一、处理图片文件流(以 Blob
格式接收文件流为例)
当后端返回图片文件流时,前端可以将其转换为可显示的图片元素(如 <img>
标签来展示),示例代码如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><img id="imageDisplay" src="" alt="显示图片"><script>// 模拟后端返回的文件流数据,这里先创建一个图片的 Blob 对象示例,实际中通常通过 AJAX 等方式获取后端返回数据const imageBlob = new Blob([/* 这里可以放入图片的二进制数据,示例简化省略具体数据 */], { type: 'image/jpeg' });const imageUrl = URL.createObjectURL(imageBlob);const imageElement = document.getElementById('imageDisplay');imageElement.src = imageUrl;// 注意,在合适的时候(比如页面卸载等情况),需要释放这个临时的 URL 对象,避免内存泄漏window.addEventListener('unload', function () {URL.revokeObjectURL(imageUrl);});</script>
</body></html>
在实际应用中,通常会使用 fetch
或者 XMLHttpRequest
等方式从后端获取文件流数据并转换为 Blob
,以下是使用 fetch
来获取后端返回的图片文件流并显示的完整示例:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><img id="imageDisplay" src="" alt="显示图片"><script>fetch('后端图片文件流接口地址', {method: 'GET',// 根据后端要求设置相应的请求头,比如认证相关的、指定返回格式等headers: {'Authorization': 'Bearer your_token'}}).then(response => response.blob()).then(imageBlob => {const imageUrl = URL.createObjectURL(imageBlob);const imageElement = document.getElementById('imageDisplay');imageElement.src = imageUrl;window.addEventListener('unload', function () {URL.revokeObjectURL(imageUrl);});}).catch(error => {console.error('获取图片文件流出错:', error);});</script>
</body></html>
二、处理文本文件流
对于后端返回的文本文件流,前端可以将其读取并展示在页面上(比如显示在 <textarea>
中),示例如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><textarea id="textDisplay" rows="10" cols="50"></textarea><script>// 模拟通过 AJAX 获取后端返回的文本文件流数据,转换为文本并显示,// 以下先简化用一个文本 Blob 示例const textBlob = new Blob([/* 这里放入文本的二进制数据,示例简化省略 */], { type: 'text/plain' });const reader = new FileReader();reader.onload = function (e) {const textArea = document.getElementById('textDisplay');textArea.value = e.target.result;};reader.readAsText(textBlob);// 如果是通过 fetch 等真实获取后端数据,示例如下:fetch('后端文本文件流接口地址', {method: 'GET'}).then(response => response.blob()).then(textBlob => {const reader = new FileReader();reader.onload = function (e) {const textArea = document.getElementById('textDisplay');textArea.value = e.target.result;};reader.readAsText(textBlob);}).catch(error => {console.error('获取文本文件流出错:', error);});</script>
</body></html>
三、处理 PDF 文件流(借助 PDF.js 库来展示,需先引入 PDF.js 相关脚本)
如果后端返回的是 PDF 文件流,想要在前端展示,可以利用 PDF.js
库实现,以下是基本的示例代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script>
</head><body><canvas id="pdfCanvas"></canvas><script>// 模拟通过 AJAX 获取后端返回的 PDF 文件流数据,转换为可显示的 PDF,// 先简化示例为一个 PDF Blobconst pdfBlob = new Blob([/* 这里放入 PDF 的二进制数据,示例简化省略 */],{ type: 'application/pdf' });const url = URL.createObjectURL(pdfBlob);pdfjsLib.getDocument(url).promise.then(function (pdf) {pdf.getPage(1).then(function (page) {const canvas = document.getElementById('pdfCanvas');const context = canvas.getContext('2d');const viewport = page.getViewport({ scale: 1 });canvas.width = viewport.width;canvas.height = viewport.height;const renderContext = {canvasContext: context,viewport: viewport};page.render(renderContext);});});window.addEventListener('unload', function () {URL.revokeObjectURL(url);});</script>
</body></html>
同样,如果使用 fetch
等方式真实从后端获取 PDF 文件流,只需把上述模拟 Blob
的部分替换为实际的 fetch
请求及处理逻辑即可。
以上这些实例展示了不同类型文件流在前端解码显示的常见做法,实际应用中,需要根据具体的后端接口规范以及业务场景进行相应的调整和完善,比如处理请求错误、设置合适的请求头、考虑文件较大时的加载和显示优化等情况。
base64 读取及转换
以下是几种前端将图片转换为Base64编码的常见方法示例:
方法一:通过FileReader
读取本地图片文件转换为Base64
这种方式适用于用户从本地选择图片后,在前端将其转换为Base64编码,方便后续展示、上传等操作。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><input type="file" id="fileInput" /><img id="imageDisplay" src="" alt="显示图片" /><script>const fileInput = document.getElementById('fileInput');fileInput.addEventListener('change', function (e) {const file = e.target.files[0];if (file) {const reader = new FileReader();reader.onloadend = function () {const base64Data = reader.result;const imageElement = document.getElementById('imageDisplay');imageElement.src = base64Data;};reader.readAsDataURL(file);}});</script>
</body></html>
在上述代码中:
- 首先通过
document.getElementById
获取页面上的文件选择输入框元素。 - 给输入框添加
change
事件监听器,当用户选择文件后触发该事件。 - 在事件处理函数中,获取用户选择的文件对象(这里假设只选择一个文件,即取
files[0]
)。 - 创建
FileReader
对象,它用于异步读取文件内容。 - 给
FileReader
的onloadend
事件绑定回调函数,当文件读取完成(成功或失败都会触发该事件结束)后,从reader.result
中获取到Base64编码的数据(readAsDataURL
方法会将文件内容读取为data URL
格式,本质就是Base64编码的字符串加上特定的前缀标识文件类型等信息)。 - 最后将获取到的Base64编码数据设置到
<img>
标签的src
属性上,实现图片的展示,也就完成了图片到Base64的转换及利用。
方法二:获取页面上已存在图片元素并转换为Base64
如果页面上已经有图片元素(例如通过 <img>
标签加载显示的图片),想要获取其Base64编码,可以按照以下示例代码操作:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><img id="existingImage" src="example.jpg" alt="示例图片" /><button id="convertButton">转换为Base64</button><textarea id="base64Output" rows="5" cols="50"></textarea><script>const convertButton = document.getElementById('convertButton');const base64Output = document.getElementById('base64Output');const existingImage = document.getElementById('existingImage');convertButton.addEventListener('click', function () {const canvas = document.createElement('canvas');canvas.width = existingImage.width;canvas.height = existingImage.height;const context = canvas.getContext('2d');context.drawImage(existingImage, 0, 0);const base64Data = canvas.toDataURL();base64Output.value = base64Data;});</script>
</body></html>
代码逻辑如下:
- 先获取页面上的相关元素,包括要转换的图片元素、转换按钮以及用于显示Base64编码结果的文本框。
- 给转换按钮添加点击事件监听器,当点击按钮时执行以下操作:
- 创建一个
<canvas>
元素,设置其宽度和高度与要转换的图片元素尺寸一致。 - 获取
<canvas>
的2d
绘图上下文。 - 使用
context.drawImage
方法将图片绘制到<canvas>
上。 - 最后通过
<canvas>
元素的toDataURL
方法获取绘制内容对应的Base64编码数据,并将其赋值到文本框的value
属性中显示出来,从而完成了图片到Base64编码的转换并展示结果。
- 创建一个
以上两种方法可以根据不同的应用场景,方便地在前端实现图片到Base64编码的转换操作,常用于图片的本地处理、预上传准备等情况。
相关文章:
js 中 file 文件 应用
文章目录 文件上传File 对象基本属性文件上传大文件上传文件格式校验通过 type 属性校验图片格式通过文件名扩展名校验 文件解析一、处理图片文件流(以 Blob 格式接收文件流为例)二、处理文本文件流三、处理 PDF 文件流(借助 PDF.js 库来展示…...
Java 泛型详细解析
泛型的定义 泛型类的定义 下面定义了一个泛型类 Pair,它有一个泛型参数 T。 public class Pair<T> {private T start;private T end; }实际使用的时候就可以给这个 T 指定任何实际的类型,比如下面所示,就指定了实际类型为 LocalDate…...
「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏
本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字,应用会判断是否接近目标数字,并提供提示“高一点”或“低一点”,直到用户猜中目标数字。这个小游戏结合状态管理和用户交互,是一个入门级的互动应用示例。 关键词 UI互…...
自然语言处理期末试题汇总
建议自己做,写完再来对答案。答案可能存在极小部分错误,不保证一定正确。 一、选择题 1-10、C A D B D B C D A A 11-20、A A A C A B D B B A 21-30、B C C D D A C A C B 31-40、B B B C D A B B A A 41-50、B D B C A B B B B C 51-60、A D D …...
记录Threadlocal使用
编写ThreadLocal工具类 package com.jjking.jplan.context;public class BaseContext<T> {public static final ThreadLocal threadLocal new ThreadLocal();//存储用户public static void set(Object t) {threadLocal.set(t);}//获取用户public static <T> T ge…...
利用 SpringBoot 开发的新冠密接者跟踪系统:医疗机构疫情防控辅助方案
摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…...
vue 2 父组件根据注册事件,控制相关按钮显隐
目标效果 我不注册事件,那么就不显示相关的按钮 注册了事件,才会显示相关内容 实现思路 组件在 mounted 的时候可以拿到父组件注册监听的方法 拿到这个就可以做事情了 mounted() {console.log(this.$listeners, this.$listeners);this.show.search !…...
【深度学习基础】一篇入门模型评估指标(分类篇)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 模…...
hls视频流学习
hls格式播放的依赖安装: <!-- 新增hls播放库 -->npm install hls.js 组件封装: <template><div class"hls-player-cls"><video ref" video" controls style"width: 100%; max-width: 800px;">…...
【electron-vite】搭建electron+vue3框架基础
一、拉取项目 electron-vite 中文文档地址: https://cn-evite.netlify.app/guide/ 官网网址:https://evite.netlify.app/ 版本 vue版本:vue3 构建工具:vite 框架类型:Electron JS语法:TypeScript &…...
第三方Express 路由和路由中间件
文章目录 1、Express 应用使用回调函数的参数: request 和 response 对象来处理请求和响应的数据。2、Express路由1.路由方法2.路由路径3.路由处理程序 3. 模块化路由4. Express中间件1.中间件简介2.中间件分类3.自定义中间件 1、Express 应用使用回调函数的参数&am…...
WPF 常用的5个布局容器控件介绍
1. Grid Grid 是最常用的布局容器之一,它允许开发者以表格的方式对控件进行组织和布局。Grid 使用行和列来划分区域,可以精确控制控件的位置和大小。 特点: 行列定义:Grid 使用 RowDefinitions 和 ColumnDefinitions 来定义行和…...
【JAVA] 杂谈: java中的拷贝(克隆方法)
这篇文章我们来介绍什么是拷贝,并且实现浅拷贝到深拷贝。 目录 一、浅拷贝 1.1 clone 方法 1.2 实现浅拷贝: 1.2.1 重写 clone方法 1.2.2 实现接口 Cloneable 1.2.3 调用克隆方法 1.2.4 原理图: 1.3 浅拷贝的不足 1.3.1 增加引用…...
同时多平台git配置:GitHub和Gitee生成不同的SSH Key
文章目录 GitHub和Gitee生成不同的SSH Key步骤1:生成SSH Key步骤2:配置SSH配置文件步骤3:查看SSH公钥步骤4:将SSH公钥添加到GitHub和Gitee步骤5:测试SSH连接步骤6:添加remote远程库 GitHub和Gitee生成不同的…...
flink1.6集成doris,并从mysql同步数据到doris
使用 Apache Flink 1.6 集成 Doris,并从 MySQL 同步数据到 Doris 是一个复杂的任务,但可以通过以下步骤实现。Doris 是一个现代化的 MPP(大规模并行处理)SQL 数据库,支持实时分析和交互式查询。Flink 可以作为实时数据…...
手搓一个不用中间件的分表策略
场景:针对一些特别的项目,不用中间件,以月为维度进行分表,代码详细设计方案 1. 定义分片策略 首先,定义一个分片策略类,用于决定数据存储在哪个分表中 import java.time.LocalDate; import java.time.fo…...
AI前景分析展望——GPTo1 SoraAI
引言 人工智能(AI)领域的飞速发展已不仅仅局限于学术研究,它已渗透到各个行业,影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中,一些领先的AI模型,像Sora和OpenAI的O1,凭借其强大…...
损失函数Hinge Loss介绍
Hinge Loss 是一种损失函数,广泛用于 支持向量机(SVM, Support Vector Machine) 和一些分类问题中。它特别适合用于 二分类问题,主要目标是让模型的预测值(通常是经过线性变换的原始分数)与真实标签之间的间隔尽可能大,从而提高分类的鲁棒性。 Hinge Loss 的定义 Hinge…...
多维高斯分布(Multivariate Gaussian Distribution)以及协方差矩阵:解析与应用
多维高斯分布:全面解析及其应用 1. 什么是多维高斯分布? 多维高斯分布(Multivariate Gaussian Distribution),也称多元正态分布,是高斯分布在高维空间中的推广。它描述了随机向量 ( x ( x 1 , x 2 , … ,…...
前端开发常用快捷键
浏览器 ctrl e 光标定位在搜索框ctrl r 刷新ctrl t 新打开tabctrl tab 向右切换tabctrl shift tab 向左切换tab vscode ctrl p 全局搜索文件ctrl f 当前文件搜索alt 光标左键向下拖动:竖向选中多行文本ctrl b 切换侧边栏显示隐藏ctrl shift p 显示命…...
用MATLAB符号工具建立机器人的动力学模型
目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型,表示为二阶微分方程组。本文以一个二杆系统为例,介绍如何用MATLAB符号工具得到微分方程表达式,只需要…...
全面解析 MySQL 常见问题的排查与解决方法
目录 前言1. 查看 MySQL 日志信息1.1 日志文件的种类与路径1.2 查看日志内容的方法1.3 日志分析的关键点 2. 查看 MySQL 服务状态2.1 查看服务状态2.2 检查进程运行情况2.3 常见启动失败问题与解决 3. 检查 MySQL 配置信息3.1 配置文件的路径与内容3.2 验证配置文件的正确性 4.…...
泷羽Sec-星河飞雪-BurpSuite之解码、日志、对比模块基础使用
免责声明 学习视频来自 B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:http…...
【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计
目录 1 用 numpy 快速求数组的各种统计量:mean, var, std 1.1 数据准备 1.2 直接用np的公式求解 1.3 注意问题 1.4 用print() 输出内容,显示效果 2 为了验证公式的背后的理解,下面是详细的展开公式的求法 2.1 均值mean的详细 2.2 方差…...
【C++】stack和queue
目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用 3. 容器适配器 3.1 什么是适配器 3.2 STL标准库中stack和queue的底层结构 3.3 deque的简单介绍(了解) 3.3.1 deque的原理介绍 3.3.2 deque优势与…...
向量的内积和外积 为什么这样定义
向量的内积和外积 为什么这样定义 flyfish 定义、公理与证明的区别 定义: 定义是人为规定的,用于描述概念的含义。例如,内积和外积是根据实际需求定义的,目的是描述几何和代数性质。定义不需要证明。 公理: 公理是数…...
简述循环神经网络RNN
1.why RNN CNN:处理图像之间没有时间/先后关系 RNN:对于录像,图像之间也许有时间/先后顺序,此时使用CNN效果不会很好,同理和人类的语言相关的方面时间顺序就更为重要了 2.RNN和CNN之间的关联 RNN和CNN本质上其实一…...
【Electron学习笔记(四)】进程通信(IPC)
进程通信(IPC) 进程通信(IPC)前言正文1、渲染进程→主进程(单向)2、渲染进程⇌主进程(双向)3、主进程→渲染进程 进程通信(IPC) 前言 在Electron框架中&…...
APP自动化测试框架的开发
基于appium的APP自动化测试框架的开发流程概览 1. 环境搭建 安装Appium Server 下载与安装:可以从Appium官方网站(Redirecting)下载安装包。对于Windows系统,下载.exe文件后双击安装;对于Mac系统,下载.dmg…...
【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积
在全连接神经网络中,每个神经元都和上一层的所有神经元彼此连接,这会导致网络的参数量非常大,难以实现复杂数据的处理。为了改善这种情况,卷积神经网络应运而生。 一、卷积 在信号处理中,卷积被定义为一个函数经过翻转…...
pytorch 融合 fuse 学习笔记
目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下(与 LoRA 相关) 参数融合功能 在使用 LoRA(Low - Rank Adaptation)对预训练模型进行微调后,fuse_lora函数的主要作…...
41 基于单片机的小车行走加温湿度检测系统
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采样DHT11温湿度传感器检测温湿度,滑动变阻器连接数码转换器模拟电量采集传感器, 电机采样L298N驱动,各项参数通过LCD1602显示&#x…...
GitLab: You cannot create a branch with a SHA-1 or SHA-256 branch name
最近在迁移git库,把代码从gerrit迁移到gitlab,有几个库报错如下: GitLab: You cannot create a branch with a SHA-1 or SHA-256 branch name ! [remote rejected] refs/users/73/373/edit-95276/1 -> refs/users/73/373/edit-95276/1 (p…...
YOLOv9改进,YOLOv9引入TransNeXt中的ConvolutionalGLU模块,CVPR2024,二次创新RepNCSPELAN4结构
摘要 由于残差连接中的深度退化效应,许多依赖堆叠层进行信息交换的高效视觉Transformer模型往往无法形成足够的信息混合,导致视觉感知不自然。为了解决这个问题,作者提出了一种聚合注意力(Aggregated Attention),这是一种基于仿生设计的token混合器,模拟了生物的中央凹…...
TorchMoji使用教程/环境配置(2024)
TorchMoji使用教程/环境配置(2024) TorchMoji简介 这是一个基于pytorch库,用于将文本分类成不同的多种emoji表情的库,适用于文本的情感分析 配置流程 从Anaconda官网根据提示安装conda git拉取TorchMoji git clone https://gi…...
uniapp运行时,同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示。
遇到自定义基座调试时安装无效或无反应?本文教你用 ADB 工具快速解决:打开 USB 调试,连接设备,找到应用包名,一键卸载问题包,清理干净后重新运行调试基座,轻松搞定! 问题场景&#…...
uniapp中父组件调用子组件方法
实现过程(setup语法糖形式下) 在子组件完成方法逻辑,并封装。在子组件中使用defineExpose暴露子组件的该方法。在父组件完成子组件ref的绑定。通过ref调用子组件暴露的方法。 子组件示例 <template> </template><script se…...
腾讯云 AI 代码助手:单元测试应用实践
引言 在软件开发这一充满创造性的领域中,开发人员不仅要构建功能强大的软件,还要确保这些软件的稳定性和可靠性。然而,开发过程中并非所有任务都能激发创造力,有些甚至是重复且乏味的。其中,编写单元测试无疑是最令人…...
ArcGIS栅格影像裁剪工具
1、前言 在最近的栅格转矢量处理过程中,发现二值化栅格规模太大,3601*3601,并且其中的面元太过细碎,通过arcgis直接栅格转面有将近几十万的要素,拿这样的栅格数据直接运行代码,发现速度很慢还难以执行出来结…...
VueWordCloud标签云初实现
文章目录 VueWordCloud学习总结安装初使用在组件中注册该组件简单使用项目中实现最终实现效果 VueWordCloud学习总结 本次小组官网的项目中自己要负责标签模块,想要实现一个标签云的效果,搜索了很多,发现vue有一个VueWordCloud库,…...
AI数据分析工具(二)
豆包-免费 优点 强大的数据处理能力: 豆包能够与Excel无缝集成,支持多种数据类型的导入,包括文本、数字、日期等,使得数据整理和分析变得更加便捷。豆包提供了丰富的数据处理功能,如数据去重、填充缺失值、转换格式等…...
sizeof和strlen区分,(好多例子)
sizeof算字节大小 带\0 strlen算字符串长度 \0之前...
求100之内的素数-多语言
目录 C 语言实现 方法 1: 使用 for 循环 方法 2: 使用埃拉托斯特尼筛法 方法 3: 使用自定义判断素数 Python 实现 方法 1: 使用自定义函数判断素数 方法 2: 使用埃拉托斯特尼筛法(Sieve of Eratosthenes) 方法 3: 使用递归方法 Java 实现 方法…...
0.shell 脚本执行方式
1.脚本格式要求 🥑脚本以 #!/bin/bash 开头 🥦 脚本要有可执行权限 2.执行脚本的两种方式 🥬 方式1:赋予x执行权限 🥒 方式2: sh执行 ...
Web实时通信@microsoft/signalr
概要说明 signalr 是微软对 websocket技术的封装; build() 与后端signalR服务建立链接;使用 on 方法监听后端定义的函数;ps:由后端发起,后端向前端发送数据使用 invoke 主动触发后端的函数;ps:由前端发起&a…...
智截违规,稳保安全 | 聚铭视频专网违规外联治理系统新品正式发布
“千里之堤,毁于蚁穴”。 违规外联作为网络安全的一大隐患, 加强防护已刻不容缓。 这一次, 我们带着全新的解决方案来了 ——聚铭视频专网违规外联治理系统, 重磅登场!...
博弈论算法详解与Python实现
目录 博弈论算法详解与Python实现第一部分:博弈论简介与算法概述1.1 博弈论概述1.2 博弈论算法概述第二部分:纳什均衡算法2.1 纳什均衡的定义2.2 纳什均衡算法的实现2.2.1 算法思路2.2.2 Python实现2.2.3 设计模式分析第三部分:囚徒困境问题的博弈论算法3.1 囚徒困境的定义3…...
Python学习笔记之IP监控及告警
一、需求说明 作为一名运维工程师,监控系统必不可少。不过我们的监控系统往往都是部署在内网的,如果互联网出口故障,监控系统即使发现了问题,也会告警不出来,这个时候我们就需要补充监控措施,增加从外到内的…...
2024/11/30 RocketMQ本机安装与SpringBoot整合
目录 一、RocketMQ简介 1.1、核心概念 1.2、应用场景 1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收 4.1、添加maven依赖 4.2、yaml配置 4.3、生产者 4.4、消费者 4.5、接口 4.6、接口测试 一、R…...
解决“磁盘已插上,但Windows系统无法识别“问题
电脑上有2块硬盘,一块是500GB的固态硬盘,另一块是1000GB的机械硬盘,按下开机键,发现500G的固态硬盘识别了,但1000GB的机械硬盘却无法识别。后面为了描述方便,将"500GB的固态硬盘"称为X盘…...