芯片制造行业如何通过WebUploader+PHP加密传输工程文件的分片数据?

《一个码农的奇幻外包漂流记》

需求分析会:当甲方爸爸说出"简单"二字时…

各位老铁们好!我是辽宁沈阳一名"资深"前端码农(资深=头发少)。刚接到个外包需求,看完后我直接表演了个东北式懵逼:

甲方需求翻译大赛

  • “要支持20G文件” → “希望你电脑硬盘够大”
  • “兼容IE9” → “希望你心态够好”
  • “1000+文件的文件夹结构” → “希望你记忆力超群”
  • “预算100元含3年维护” → “希望你家里有矿”
  • “7×24小时支持” → “希望你不需要睡觉”

技术选型:穷且益坚版解决方案

前端部分(Vue3+原生JS缝合怪版)

// 文件夹上传器(贫困版)classDiaoSiFolderUploader{constructor(){this.chunkSize =5*1024*1024;// 5MB一片this.maxTry =99;// 最大重试次数(因为甲方网络是2G)this.debugMode =true;// 控制台输出"假装在工作"}// 加密函数(表演型加密)fakeEncrypt(data){return`${JSON.stringify(data)}`;}// IE9特供版进度条(用div模拟)updateProgressIE9(percent){const bar = document.getElementById('ie9-progress')|| document.createElement('div'); bar.innerHTML =`${percent}% (IE9用户请耐心等待,先去泡个茶) `;}// 递归上传文件夹(血压升高函数)asyncuploadFolder(folder, path =''){returnnewPromise((resolve, reject)=>{try{// 假装在处理文件夹this.debugLog(`正在处理文件夹: ${path}`);// 用setTimeout模拟延迟(让甲方觉得你在努力)setTimeout(async()=>{for(let entry of folder.entries()){if(entry.isDirectory){awaitthis.uploadFolder(entry,`${path}/${entry.name}`);}else{awaitthis.uploadFile(entry, path);}}resolve();},500);// 故意延迟让进度条看起来更真实}catch(e){reject(newError('文件夹处理出错,建议甲方加钱'));}});}// 断点续传(localStorage硬撑版)resumeUpload(file){const saved =JSON.parse(localStorage.getItem(file.name)||'{"chunks":[]}');// 计算未上传的切片const totalChunks = Math.ceil(file.size /this.chunkSize);const remaining = Array.from({length: totalChunks},(_,i)=> i).filter(i=>!saved.chunks.includes(i));// 逐个上传(假装很可靠) remaining.forEach(chunkIndex=>{const chunk = file.slice( chunkIndex *this.chunkSize, Math.min(file.size,(chunkIndex +1)*this.chunkSize));this.uploadChunk(chunk, chunkIndex).then(()=>{ saved.chunks.push(chunkIndex); localStorage.setItem(file.name,JSON.stringify(saved));});});}debugLog(msg){if(this.debugMode){ console.log(`[表演时间 ${newDate().toLocaleTimeString()}] ${msg}`);}}}

兼容性处理方案(辽宁特供版)

浏览器应对策略心理承受力
IE9加入检测代码自动弹出"升级浏览器"弹窗已经看开
Windows 7老机器降级使用jQuery(别问为什么)心如止水
20G文件上传显示"正在压缩"然后偷偷降低画质良心?不存在的
100元预算在代码里加入"甲方专属彩蛋"创意无价

加群福利大放送(东北老铁版)

QQ群374992201神秘福利

  • 入群即送《如何优雅拒绝甲方》电子书
  • 分享"我的外包血泪史"系列文章
  • 免费获取"代码跑不通的100种原因"
  • 参与"猜猜这次甲方会提什么需求"竞猜

特别活动

  • 推荐项目成功提成50%(前提是甲方肯付钱)
  • 帮写辞职信服务(外包做不下去时使用)
  • 代购沈阳鸡架(代码写饿了必备)

生存法则:如何在预算100元下生存

经过和甲方大战三百回合,我总结了以下生存秘籍:

  1. 需求管理:所有功能都回答"可以做,但要加钱"
  2. 时间管理:使用"在调试了"+"马上就好"组合技
  3. 技术方案:GitHub搜相似项目然后改CSS颜色
  4. 交付策略:先给个能运行的demo,剩下的等"下个版本"
  5. 终极奥义:在项目中期突然"生病住院"

所以各位东北老铁、全国同行们,救救孩子吧!这项目要是搞不定,我就只能回老家卖烤冷面了(其实生意还不错?)🍜

(正经建议:大文件上传可以考虑用现成的云服务SDK,比自己造轮子靠谱,虽然100块可能连流量费都不够…)

将组件复制到项目中

示例中已经包含此目录

image

引入组件

image

配置接口地址

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

image

处理事件

image

启动测试

image

启动成功

image

效果

image

数据库

image

效果预览

文件上传

文件上传

文件刷新续传

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

文件续传

文件夹上传

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

文件夹上传

下载示例

点击下载完整示例

Read more

pywebview:用Python+Web技术打造轻量级桌面应用!

pywebview:用Python+Web技术打造轻量级桌面应用!

✍️作者:唐叔在学习 💡专栏:唐叔学python ✨关键词:Python桌面开发、pywebview教程、WebView应用、前后端分离、JS与Python交互、桌面应用打包、Electron替代方案、Python GUI 大家好,我是唐叔。今天我们来聊聊一个非常轻量且强大的Python库——pywebview。如果你曾经为开发一个简单的桌面应用而纠结于Electron的笨重、PyQt的复杂,或是Tkinter的界面简陋,那pywebview或许正是你一直在找的解决方案。 文章目录 * 一、介绍 * 二、安装 * 安装全量版本 * 安装指定环境版本 * 三、使用入门 * 3.1 基本使用 * 3.2 应用程序架构 * 纯网络服务架构 * 无服务器架构 * 3.3 JS与Python交互 * 四、应用打包 * 五、常见使用场景 * 5.1 文件操作 * 文件下载

Webstorm中的编码辅助AI

Webstorm中的编码辅助AI

Webstorm中的编码辅助AI * MarsCode * MarsCode在WebStorm中的使用 * 安装方式 * 核心功能 * 其它AI插件 MarsCode MarsCode 是一款由 字节跳动(ByteDance) 推出的 AI 编程助手,类似于 GitHub Copilot,提供智能代码补全、生成和优化功能。目前,它主要支持 VS Code 和 JetBrains 系列 IDE(如 WebStorm),但需要手动安装插件。 MarsCode在WebStorm中的使用 安装方式 通过Marketplace安装 1. 在 WebStorm 的 Settings > Plugins 中搜索 MarsCode。 直接安装并重启 IDE。 核心功能 1. 智能代码补全:基于上下文预测代码,支持多种语言 2.

Spring AI 1.1.2 集成 MCP(Model Context Protocol)实战:以 Tavily 搜索为例

本文分享在 Spring Boot 3.5 + Spring AI 1.1.2 中集成 MCP Client 的完整落地方案。通过连接 Tavily MCP Server,让大模型在对话中自动调用搜索工具获取实时信息,同时保持 Spring Boot 体系内的工程化体验。 一、MCP 是什么?为什么需要它 MCP(Model Context Protocol) 是一种让 LLM 与外部工具/资源交互的标准化协议: * MCP Server:将工具能力(搜索、查库、读文件等)以统一格式暴露 * MCP Client:连接 Server、拉取工具定义,并在需要时转发工具调用 * LLM(通过

[AI]从零开始的DeepSeek本地部署及本地API调用教程

[AI]从零开始的DeepSeek本地部署及本地API调用教程

一、前言         最近DeepSeek也是比较火,我也去学习了一下如何本都部署DeepSeek,目前主要方法有两种吧,一种是自己拉取开发环境并且运行模型,另一种则是使用框架来运行模型。使用框架运行模型也是目前部署DeepSeek最简单的方法。那么本次教程,就来教大家如何使用本地的模型框架来运行DeepSeek模型并且调用这个模型的API,如果你准备好了,那就让我们开始吧! 二、使用的框架及硬件要求         本次教程中,会为大家介绍使用Ollama和LM Studio两种框架运行DeepSeek模型,这两款框架在一些地方也各有自己的优缺点,具体的大家可以自行体会。之前的教程中已经为大家演示过如何安装Ollama并且运行llama模型。但是没有教大家如何修改Ollama的路径,本次教程会将这一空缺补齐。         现在来讲讲硬件要求,首先要明确一点的是要运行大模型需要比较高的算力,所以,尽量不要使用太老的电脑进行尝试。对于一些被量化过的模型,比如1.5B参数的模型甚至更小的模型,使用CPU就可以勉强运行。对于一些较大的模型,比如4B,6B,8B的模型,可能就