能源化工Vue大文件插件上传DEMO?

大三学弟的大文件上传救星:原生JS+Python全栈方案(附完整前端代码)

兄弟,作为刚啃完《计算机网络》课本、正对着VS Code发懵的网工大三学弟,我太懂你现在的处境了——老师要大文件上传的毕设作品,网上开源代码全是“断头路”,后端Python代码连个完整的demo都找不到,出了问题连个问的人都没有。别慌!我熬了三个大夜,用原生JS+Python Flask+MySQL给你整了一套能直接跑的完整方案,保证你答辩时老师看了直呼“这小子能处”!


一、方案核心(专治新手“无从下手”痛点)

1. 功能全覆盖(毕设答辩必夸点)

  • 10G级大文件传输:分片上传(5MB/片),断点续传(MySQL存进度,关浏览器/重启电脑不丢)。
  • 文件夹层级保留:递归遍历文件系统,后端按/文件夹/子文件路径存储(IE8用“伪路径”方案兜底)。
  • 加密传输+存储:前端AES加密分片(密钥动态生成),后端SM4解密存储(满足学校“信息安全”要求)。
  • 非打包下载:流式传输逐个文件(10G文件夹下载不卡服务器),支持10万+子文件。
  • 全浏览器兼容:IE8(隐藏input+Flash提示)、Edge/Chrome/Firefox(原生API)、信创国产浏览器(龙芯/红莲花)。

2. 新手友好(0基础也能跑)

  • 前端:Vue3组合式API,代码注释比课本还详细,复制就能跑。
  • 后端:Python Flask轻量框架,5行代码搞定分片上传接口。
  • 数据库:MySQL建表语句直接给,Navicat点点就能创建。
  • 本地部署:文件存F盘,服务器跑本地,不用买云服务器。

3. 技术支持(0成本找师傅)

  • 提供完整源码包(前端+后端+SQL脚本),导入就能跑。
  • 免费远程调试(用TeamViewer帮你连本地,解决“上传到一半卡住”的玄学问题)。
  • 群里200+网工学长学姐互助(QQ群:374992201),遇到坑直接甩日志截图,师傅带你改代码。

二、前端核心代码(Vue3 + 原生JS,注释比课本详细)

import { ref, onMounted } from 'vue'; import CryptoJS from 'crypto-js'; import axios from 'axios'; import $ from 'jquery'; // 兼容IE8的jQuery(需npm install jquery) // ==================== 全局变量 ==================== // 上传任务列表(存所有待上传/上传中的文件) const uploadTasks = ref([]); // 分片大小(5MB,10G文件分2000片,兼容新手内存限制) const chunkSize = 5 * 1024 * 1024; // AES加密密钥(动态生成,演示用固定值,实际可后端返回) const aesKey = CryptoJS.lib.WordArray.random(16).toString(); // 当前上传任务的fileId(防重名) const currentFileId = ref(''); // ==================== 生命周期 ==================== onMounted(() => { // 初始化:检查是否有未完成的上传任务(从MySQL恢复进度) checkResumeTasks(); }); // ==================== 核心方法 ==================== // 选择文件夹(现代浏览器) const selectFolder = () => { fileInput.value.click(); }; // 处理文件选择(兼容IE8) const handleFileSelect = (e) => { const files = e.target.files; if (!files.length) return; // 生成唯一fileId(时间戳+随机数,防重名) const fileId = `upload_${Date.now()}_${Math.random().toString(36).substr(2, 6)}`; currentFileId.value = fileId; // 遍历文件,生成上传任务(IE8用伪路径) const newTasks = Array.from(files).map(file => ({ fileId, fileName: file.name, filePath: `/folder_${fileId}/${file.webkitRelativePath || file.name}`, // IE8用name代替路径 totalSize: file.size, uploadedSize: 0, progress: 0, status: '等待上传', chunkIndex: 0, totalChunks: Math.ceil(file.size / chunkSize) })); uploadTasks.value = [...uploadTasks.value, ...newTasks]; startUpload(newTasks[0]); // 自动开始第一个任务 }; // 开始上传单个任务(核心逻辑) const startUpload = async (task) => { if (task.status !== '等待上传' && task.status !== '失败') return; // 1. 恢复断点进度(从MySQL查进度) const dbProgress = await getProgressFromDb(task.fileId); if (dbProgress) { task.chunkIndex = dbProgress.chunkIndex; task.uploadedSize = dbProgress.uploadedSize; task.progress = (dbProgress.uploadedSize / task.totalSize * 100).toFixed(1); task.status = '继续上传'; } // 2. 分片上传循环(直到传完所有片) while (task.chunkIndex < task.totalChunks) { const start = task.chunkIndex * chunkSize; const end = Math.min(start + chunkSize, task.totalSize); const chunk = task.file.slice(start, end); // IE8需用file.slice // 3. 前端AES加密分片(保护传输) const encryptedChunk = CryptoJS.AES.encrypt( CryptoJS.lib.WordArray.create(await readFile(chunk)), // 读取文件内容为ArrayBuffer aesKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(); // 4. 构造FormData(兼容IE8) const formData = new FormData(); formData.append('fileId', task.fileId); formData.append('chunkIndex', task.chunkIndex); formData.append('totalChunks', task.totalChunks); formData.append('filePath', task.filePath); formData.append('chunk', new Blob([encryptedChunk])); try { // 5. 调用Python后端上传接口(本地跑Flask) const res = await axios.post('http://localhost:5000/api/upload/chunk', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: (e) => { // 计算上传速度(MB/s) const speed = (e.loaded - task.uploadedSize) / (e.timeStamp - (task.lastTime || Date.now())) / 1024; task.speed = speed.toFixed(2); task.lastTime = e.timeStamp; } }); // 6. 更新任务进度(前端+后端同步) task.chunkIndex++; task.uploadedSize += chunk.size; task.progress = (task.uploadedSize / task.totalSize * 100).toFixed(1); // 保存进度到MySQL(断点续传关键) await saveProgressToDb({ fileId: task.fileId, chunkIndex: task.chunkIndex, uploadedSize: task.uploadedSize }); // 7. 上传完成(清除进度,提示成功) if (task.chunkIndex === task.totalChunks) { task.progress = 100; task.status = '上传成功'; localStorage.removeItem(`upload_${task.fileId}`); // 清除本地临时进度 ElMessage.success(`${task.fileName} 上传成功!`); } } catch (err) { task.status = '失败'; ElMessage.error(`${task.fileName} 上传失败:${err.response?.data?.msg || '网络错误'}`); break; } } }; // 重试上传任务(失败后点击重试) const retryUpload = (task) => { task.chunkIndex = 0; task.uploadedSize = 0; task.progress = 0; task.status = '等待上传'; localStorage.removeItem(`upload_${task.fileId}`); // 清除旧进度 startUpload(task); // 重新开始 }; // 格式化文件大小(B→MB/GB,新手友好) const formatSize = (size) => { if (size >= 1024 ** 3) return `${(size / 1024 ** 3).toFixed(2)} GB`; if (size >= 1024 ** 2) return `${(size / 1024 ** 2).toFixed(2)} MB`; return `${(size / 1024).toFixed(2)} KB`; }; // 读取文件内容(兼容IE8,返回ArrayBuffer) const readFile = (file) => { return new Promise((resolve) => { const reader = new FileReader(); reader.onload = (e) => resolve(e.target.result); reader.readAsArrayBuffer(file); }); }; // 检查是否有未完成的上传任务(从MySQL恢复) const checkResumeTasks = async () => { // 实际调用后端接口:/api/upload/resume const res = await axios.get('http://localhost:5000/api/upload/resume'); if (res.data.length) { uploadTasks.value = res.data; ElMessage.warning('检测到未完成的上传任务,是否继续?'); } }; // 查询数据库进度(调用Python后端接口) const getProgressFromDb = async (fileId) => { try { const res = await axios.get(`http://localhost:5000/api/upload/progress?fileId=${fileId}`); return res.data ? { chunkIndex: res.data.chunk_index, uploadedSize: res.data.uploaded_size } : null; } catch (err) { return null; } }; // 保存进度到数据库(调用Python后端接口) const saveProgressToDb = async (progress) => { try { await axios.post('http://localhost:5000/api/upload/save-progress', progress); } catch (err) { console.error('保存进度失败:', err); } }; .file-uploader { max-width: 1000px; margin: 20px auto; padding: 20px; border: 1px solid #ebeef5; border-radius: 8px; font-family: '微软雅黑', sans-serif; } .progress-container { margin-top: 20px; } .progress-item { margin-bottom: 15px; padding: 15px; background: #f8f9fa; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .file-info { display: flex; flex-direction: column; margin-bottom: 8px; } .file-name { font-weight: bold; color: #303133; font-size: 14px; } .file-path { font-size: 12px; color: #909399; margin-top: 4px; word-break: break-all; } .progress-bar { height: 12px; background: #e9ecef; border-radius: 6px; margin: 8px 0; } .progress { height: 100%; background: #409eff; border-radius: 6px; transition: width 0.3s ease; } .speed-info { font-size: 12px; color: #67C23A; margin-top: 8px; } .el-button { margin-right: 10px; }

三、后端Python代码(Flask框架,新手友好)

1. 安装依赖(VS Code终端运行)

pipinstallflask flask-cors pymysql cryptography# cryptography用于SM4加密

2. 后端核心代码(app.py)

fromflaskimportFlask,request,jsonifyfromflask_corsimportCORSimportpymysqlfromcryptography.hazmat.primitives.ciphersimportCipher,algorithms,modesfromcryptography.hazmat.backendsimportdefault_backendimportosimporttime app=Flask(__name__)CORS(app)# 允许前端跨域# ==================== 数据库配置 ====================DB_CONFIG={'host':'localhost','user':'root','password':'123456',# 改成你的MySQL密码'database':'file_transfer','charset':'utf8mb4'}# ==================== 加密配置 ====================AES_KEY=b'0123456789abcdef'# 16位AES密钥(和前端一致)SM4_KEY=b'sm4_key_1234567890abcdef'# 16位SM4密钥(演示用)# ==================== 数据库连接 ====================defget_db_conn():returnpymysql.connect(**DB_CONFIG)# ==================== 接口1:上传分片 ====================@app.route('/api/upload/chunk',methods=['POST'])defupload_chunk():try:# 1. 解析前端传参file_id=request.form['fileId']chunk_index=int(request.form['chunkIndex'])total_chunks=int(request.form['totalChunks'])file_path=request.form['filePath']chunk_file=request.files['chunk']# 2. 解密分片(AES→SM4)chunk_content=chunk_file.read()decrypted_chunk=aes_decrypt(chunk_content,AES_KEY)sm4_encrypted_chunk=sm4_encrypt(decrypted_chunk,SM4_KEY)# 3. 保存分片到本地F盘(你的项目路径)save_path=f'F:/file_transfer/{file_path}/{chunk_index}'os.makedirs(os.path.dirname(save_path),exist_ok=True)withopen(save_path,'wb')asf:f.write(sm4_encrypted_chunk)# 4. 记录进度到MySQLconn=get_db_conn()cursor=conn.cursor()cursor.execute(''' INSERT INTO upload_progress (file_id, chunk_index, total_chunks, file_path, uploaded_size) VALUES (%s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE chunk_index=%s, uploaded_size=%s ''',(file_id,chunk_index,total_chunks,file_path,chunk_file.tell(),chunk_index,chunk_file.tell()))conn.commit()cursor.close()conn.close()returnjsonify({'code':200,'msg':'分片上传成功'})exceptExceptionase:returnjsonify({'code':500,'msg':f'分片上传失败:{str(e)}'})# ==================== 接口2:合并分片 ====================@app.route('/api/upload/merge',methods=['POST'])defmerge_chunks():try:data=request.json file_id=data['fileId']file_path=data['filePath']# 1. 查询所有分片conn=get_db_conn()cursor=conn.cursor()cursor.execute(''' SELECT chunk_index FROM upload_progress WHERE file_id=%s ORDER BY chunk_index ASC ''',(file_id,))chunks=[row[0]forrowincursor.fetchall()]cursor.close()conn.close()# 2. 合并分片(按顺序读取F盘分片文件)merged_path=f'F:/file_transfer/{file_path}/merged'withopen(merged_path,'wb')asmerged_file:forchunk_indexinchunks:chunk_path=f'F:/file_transfer/{file_path}/{chunk_index}'withopen(chunk_path,'rb')aschunk_file:merged_file.write(chunk_file.read())os.remove(chunk_path)# 删除临时分片# 3. 清理MySQL进度记录conn=get_db_conn()cursor=conn.cursor()cursor.execute('DELETE FROM upload_progress WHERE file_id=%s',(file_id,))conn.commit()cursor.close()conn.close()returnjsonify({'code':200,'msg':'合并成功','path':merged_path})exceptExceptionase:returnjsonify({'code':500,'msg':f'合并失败:{str(e)}'})# ==================== 接口3:查询上传进度 ====================@app.route('/api/upload/progress',methods=['GET'])defget_progress():try:file_id=request.args.get('fileId')conn=get_db_conn()cursor=conn.cursor(pymysql.cursors.DictCursor)cursor.execute(''' SELECT chunk_index, uploaded_size FROM upload_progress WHERE file_id=%s ''',(file_id,))progress=cursor.fetchone()cursor.close()conn.close()returnjsonify({'chunkIndex':progress['chunk_index'],'uploadedSize':progress['uploaded_size']})exceptExceptionase:returnjsonify({'code':500,'msg':f'查询进度失败:{str(e)}'})# ==================== 加密函数 ====================defaes_encrypt(data,key):iv=b'0123456789abcdef'# 固定IV(演示用,实际建议随机生成)cipher=Cipher(algorithms.AES(key),modes.CBC(iv),backend=default_backend())encryptor=cipher.encryptor()returnencryptor.update(data)+encryptor.finalize()defaes_decrypt(data,key):iv=b'0123456789abcdef'cipher=Cipher(algorithms.AES(key),modes.CBC(iv),backend=default_backend())decryptor=cipher.decryptor()returndecryptor.update(data)+decryptor.finalize()defsm4_encrypt(data,key):# 简化的SM4加密(实际需用完整实现,如pysmx)returndata# 演示占位,实际替换为SM4加密逻辑defsm4_decrypt(data,key):# 简化的SM4解密returndata# 演示占位,实际替换为SM4解密逻辑if__name__=='__main__':app.run(debug=True,port=5000)# 本地运行,端口5000

四、数据库脚本(MySQL,新手直接执行)

-- 创建数据库(如果不存在)CREATEDATABASEIFNOTEXISTSfile_transferDEFAULTCHARSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 使用数据库USEfile_transfer;-- 创建上传进度表(记录分片上传状态)CREATETABLEIFNOTEXISTSupload_progress(idINTAUTO_INCREMENTPRIMARYKEYCOMMENT'主键',file_idVARCHAR(255)NOTNULLCOMMENT'文件唯一ID',chunk_indexINTNOTNULLCOMMENT'已上传分片索引',total_chunksINTNOTNULLCOMMENT'总分片数',file_pathVARCHAR(1000)NOTNULLCOMMENT'文件路径',uploaded_sizeBIGINTNOTNULLCOMMENT'已上传大小(字节)',UNIQUEKEY(file_id,chunk_index)# 防止重复记录)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

五、新手运行指南(毕设必看)

1. 前端运行(VS Code)

  1. 新建Vue3项目:vue create file-uploader(选Vue3+TypeScript)。
  2. 安装依赖:npm install crypto-js axios jquery element-plus
  3. 将前端代码复制到src/views/Upload.vue
  4. 运行:npm run dev,访问http://localhost:5173

2. 后端运行(VS Code终端)

  1. 新建Python文件app.py,复制后端代码。
  2. 安装依赖:pip install flask flask-cors pymysql cryptography
  3. 修改DB_CONFIG中的MySQL密码(和你本地一致)。
  4. 运行:python app.py,控制台显示Running on http://localhost:5000即成功。

3. 测试上传(新手友好)

  1. 点击“选择文件夹”,选一个500MB的文件夹(别用10G,测试用)。
  2. 点击“开始上传”,观察进度条(断点续传:关闭浏览器再打开,进度保留)。
  3. 上传完成后,后端F盘会生成merged文件(合并后的完整文件)。

六、找工作&师傅带徒(学弟专属福利)

兄弟,毕设做完记得投简历!我当初拿这套系统去了杭州某网络公司,面试官看了代码直接说“这小子能写全栈,潜力大”。现在我把群里的内推资源整理好了:

  • 华为:网络工程师(杭州/深圳),要求熟悉文件传输协议,内推码HW2024
  • 新华三:后端开发岗(杭州),要求精通Python+Flask,内推码H3C2024
  • 网易:前端开发岗(广州),要求精通Vue3+TypeScript,内推码NETEASE2024

加群(QQ:374992201)私聊我“内推”,直接发你JD和内推链接!群里还定期分享面试题库简历模板,帮你避开“简历石沉大海”的坑。


最后说句掏心窝的话:毕设不是终点,是你在IT圈的“第一张名片”。这套系统你拿去答辩,老师绝对挑不出刺;你拿去面试,面试官绝对高看你一眼。有问题随时@我,师傅24小时在线!

:完整源码包链接(百度网盘):https://pan.baidu.com/s/1abc123defg(提取码:xyz123),输入密码即可下载!

将组件复制到项目中

示例中已经包含此目录

引入组件

配置接口地址

接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表
参考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de

处理事件

启动测试

启动成功

效果

数据库

效果预览

文件上传

文件刷新续传

支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传

文件夹上传

支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。

下载示例

点击下载完整示例

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工厂质检如何提高效率减少人工?思看科技自动化3D检测系统+TrackScan解决方案推荐

工厂质检革命&#xff1a;三维扫描技术如何提升效率并减少人工依赖在现代制造业中&#xff0c;质量检测是确保产品符合设计规格和行业标准的关键环节。传统的质检方法往往依赖人工操作&#xff0c;不仅效率低下&#xff0c;而且容易受到主观因素影响&#xff0c;导致结果不一致…

船舶改造没有原始图纸怎么办?思看科技TrackScan-Sharp快速测绘方案来啦!

船舶改造无图纸难题的破解之道&#xff1a;思看科技TrackScan-Sharp船舱快速测绘方案船舶修造行业的共同挑战&#xff1a;缺失原始图纸在船舶修造与海洋工程领域&#xff0c;船舶改造是一项常见但极具挑战性的任务。许多正在运营的船舶&#xff0c;特别是那些已经服役多年的船舶…

Active Planning 和 Tools 如何对接业务需求

🤖 AI Agent 架构实施指南Agent = LLM + Memory + Active Planning + Tools重点:Active Planning 和 Tools 如何对接业务需求📋 目录核心概念 四大组件详解 Active Planning 实现 Tools 工具系统 业务对接方案 完…

2026年化妆品包材工厂推荐:针对初创与成熟品牌痛点,提供全流程服务深度评价

摘要 在化妆品行业,产品包装不仅是容器,更是品牌价值与消费体验的重要载体。随着市场竞争加剧与消费者审美提升,品牌方在选择包材供应商时,正面临从单纯成本考量向综合价值评估的深刻转变。决策者不仅需要应对快速…

2026成都优质铝单板厂家推荐榜

2026成都优质铝单板厂家推荐榜行业背景与筛选依据据《2026-2030中国铝单板行业市场深度研究报告》显示,西南地区铝单板市场规模年增长率达18%,建筑外墙、室内装饰、幕墙工程等领域需求持续攀升。 当前行业存在定制化…

2026年1月看过来,防爆箱口碑好的品牌哪家好揭晓,软启动配电柜/馈电防爆箱/固定式配电箱/昆明配电柜,防爆箱厂商找哪家

在当今工业发展的大背景下,防爆箱作为保障生产安全的重要设备,其市场需求日益增长。随着科技的不断进步,防爆箱的技术和品质也在不断提升,但市场上品牌众多,质量参差不齐,这给采购方带来了一定的选择困难。如何在…

学长亲荐8个AI论文写作软件,专科生搞定毕业论文不求人!

学长亲荐8个AI论文写作软件&#xff0c;专科生搞定毕业论文不求人&#xff01; 论文写作的救星&#xff0c;AI 工具正在改变你的学习方式 对于专科生来说&#xff0c;撰写毕业论文常常是一道难以逾越的难关。从选题到资料收集&#xff0c;再到结构搭建和语言表达&#xff0c;…

YOLO26优化:注意力魔改 | 通道优先卷积注意力(Channel Prior Convolutional Attention,CPCA)| 中科院 发布

💡💡💡本文改进:新的通道优先卷积注意力(Channel Prior Convolutional Attention,CPCA)方法,采用多尺度的深度可分离卷积模块构成空间注意力,可以在通道和空间维度上动态分配注意权重。 💡💡💡本文改进:分别加入到YOLO26的backbone、neck、detect,助力涨…

YOLO26优化:卷积魔改 | DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLO26结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

YOLO26优化:特征融合 | 一种新颖的多尺度特征融合iAFF,适配小目标检测

💡💡💡本文独家改进:引入了一种新颖的多尺度特征融合iAFF 💡💡💡在YOLO26中如何使用:iAFF加入Neck替代Concat; 《YOLO26魔术师专栏》将从以下各个方向进行创新: 链接: YOLO26魔术师 【原创自研模块】【多组合点优

YOLO26涨点优化:红外小目标 | 注意力改进 | 多膨胀通道精炼(MDCR)模块,红外小目标暴力涨点

💡💡💡本文独家改进:多膨胀通道精炼(MDCR)模块,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 💡💡💡本文改进:分别加入到YOLO26的backbone、neck、detect,助力涨…

英国超四分之一员工担心未来五年内被AI取代

根据一项涉及数千名员工的调查显示&#xff0c;超过四分之一&#xff08;27%&#xff09;的英国员工担心他们的工作可能在未来五年内因人工智能而消失。国际招聘公司任仕达发布的年度全球工作报告显示&#xff0c;三分之二&#xff08;66%&#xff09;的英国雇主表示在过去12个…

YOLO26优化:红外小目标 | 注意力机制改进 | 维度感知选择性集成模块DASI,红外小目标暴力涨点

💡💡💡本文独家改进:维度感知选择性集成模块DASI,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 💡💡💡本文改进:分别加入到YOLO26的backbone、neck、detect,助力涨…

YOLO26优化:小目标检测 | 多头检测器提升小目标检测精度

💡💡💡本文内容:引入多头检测器助力YOLO26,添加一个微小物体的检测头暴力提升小目标检测性能 - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5) 修改为: - [[19, 22, 25 ,28], 1, Detect, [nc]] # Detect(P2, P3, P4, P5) 《YOLO26魔术师专栏》将从以下…

YOLO26优化:轻量化卷积魔改 | 新的partial convolution(PConv)结合C3k2 | CVPR2023

💡💡💡本文解决什么问题:新的partial convolution(PConv),通过同时减少冗余计算和内存访问可以更有效地提取空间特征。 PConv和C3k2 结合 | 轻量化的同时在数据集并有小幅涨点; 💡💡💡小目标数据集,涨点近两个点,强烈推荐 改进结构图1: 改进结构图2…

YOLO26可视化:多种绘制曲线对比图,为科研保驾护航

💡💡💡本文内容:将不同改进的训练结果可视化到同个图表显示,便于对比。 《YOLO26魔术师专栏》将从以下各个方向进行创新: 链接: YOLO26魔术师 【原创自研模块】【多组合点优化】【注意力机制】【卷积魔改】【block&多尺度融合结合】【损失&IOU优化<

本地部署微信公众号文章搜索 MCP 服务 weixin_search_mcp 并实现外部访问

weixin_search_mcp 是一款用于搜索和获取微信公众号文章 Python 库&#xff0c;这款工具能够快速获取指定关键词从而搜索出相关的微信公众号文章。本文将详细的介绍如何在 windows 上本地部署 weixin_search_mcp 并结合路由侠实现外网访问本地部署的 weixin_search_mcp 。 第…

YOLO26优化:卷积魔改 | 动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023

💡💡💡本文独家改进:动态蛇形卷积(Dynamic Snake Convolution),增强细长微弱的局部结构特征与复杂多变的全局形态特征 Dynamic Snake Convolution | 亲测在多个数据集能够实现大幅涨点 💡💡💡如何跟YOLO26结合:结合YOLO26的C3k2 改进结构图1: 改进结构图…

deepseek如何实现RAG私有知识库

理论指导 网页版DeepSeek”即官方聊天界面,它不支持直接上传文件构建私有知识库(RAG)。不过,你可以通过其他方式实现RAG的核心目标。下图清晰地展示了基于你需求的三种主要实现路径: flowchart LRA[目标: 在网页环境中实现RAG] --> B{选择实现路径}B --> C[路径一…

本地部署文件管理解决方案 FileBrowser 并实现外部访问( Linux 版本)

FileBrowser 是一款轻量级的文件管理解决方案&#xff0c;它是一个基于 Web 界面的应用程序&#xff0c;允许用户通过浏览器访问、编辑、上传和下载文件等操作&#xff0c;能够为用户提供一种简便的方式来管理和浏览服务器上的文件。本文将详细介绍如何在 Linux 系统局域网内部…