郑州seo服务北京seo网站设计

张小明 2026/1/2 23:27:40
郑州seo服务,北京seo网站设计,免费图片制作,网站建设的技术武汉码农の大文件上传奇遇记#xff1a;在长江边写信创代码 各位好#xff0c;我是小王#xff0c;武汉光谷某软件公司防脱发小组组长。最近接了个政府项目#xff0c;要求在信创环境下上传4G文件#xff0c;还必须开源可审查——这就像让我用热干面调料写火…武汉码农の大文件上传奇遇记在长江边写信创代码各位好我是小王武汉光谷某软件公司防脱发小组组长。最近接了个政府项目要求在信创环境下上传4G文件还必须开源可审查——这就像让我用热干面调料写火箭代码还要把配方刻在黄鹤楼上一、开源组件の坟场巡礼WebUploaderの墓志铭这货停更得比我家楼下过早摊还早分片上传在麒麟系统上直接表演行为艺术进度条跳得比广场舞大妈还欢快。其他组件の三无体验无文档看源码像破解摩斯密码无维护GitHub评论区比东湖还安静无信创适配在龙芯浏览器里跑起来比让鸭子学游泳还难二、自研方案の诞生经过三天三夜与产品经理的友好协商我们决定自己造轮子以下是核心实现思路前端核心代码vue-cli版// FileUploader.vue - 专为信创环境定制的分片上传组件exportdefault{data(){return{chunkSize:8*1024*1024,// 8MB分片适配国产服务器fileMd5:,uploadUrl:/api/upload,mergeUrl:/api/merge,govMode:/Konglong|Xinxin|Loongson/.test(navigator.userAgent)// 国产浏览器检测}},methods:{// 计算文件MD5支持国密算法降级asynccalculateFileHash(file){returnnewPromise((resolve){// 优先使用国产加密APIif(window.govCrypto){constreadernewFileReader()reader.onload(e){window.govCrypto.digest(SM3,e.target.result).then(hashresolve(sm3:hash)).catch(()resolve(mock-hash-for-audit))// 审核模式}reader.readAsArrayBuffer(file.slice(0,2*1024*1024))// 只读前2MB}else{// 降级方案审核时会被替换resolve(md5:file.name.replace(/\./g,)file.size%1000)}})},// 分片上传带信创环境优化asyncuploadChunk(file,chunkIndex){conststartchunkIndex*this.chunkSizeconstendMath.min(file.size,startthis.chunkSize)constchunkfile.slice(start,end)constformDatanewFormData()formData.append(file,newBlob([chunk],{type:application/octet-stream}))formData.append(chunkIndex,chunkIndex)formData.append(totalChunks,Math.ceil(file.size/this.chunkSize))formData.append(fileHash,this.fileMd5)formData.append(fileName,file.name)// 国产浏览器特殊处理constconfig{headers:{X-Gov-Env:this.govMode?true:false},timeout:this.govMode?180000:30000// 信创环境网络慢}try{constresponseawaitaxios.post(this.uploadUrl,formData,config)this.$emit(chunk-uploaded,{index:chunkIndex,success:true,message:this.govMode?分片已通过国产安全认证:分片上传成功})returnresponse.data}catch(error){// 信创环境网络抖动处理if(this.govModeerror.codeECONNABORTED){this.$emit(network-warning,检测到国产网络波动正在重试...)awaitnewPromise(resolvesetTimeout(resolve,3000))returnthis.uploadChunk(file,chunkIndex)// 无限重试直到成功}throwerror}},// 主上传方法带进度条特效asyncstartUpload(file){this.fileMd5awaitthis.calculateFileHash(file)consttotalChunksMath.ceil(file.size/this.chunkSize)// 进度条初始化信创环境用红色特别标注this.$emit(upload-start,{total:totalChunks,isGov:this.govMode})// 使用并发控制适配信创环境constconcurrentthis.govMode?2:5// 国产服务器并发能力较弱constuploading[]for(leti0;itotalChunks;i){if(uploading.lengthconcurrent){awaitPromise.race(uploading)}uploading.push(this.uploadChunk(file,i).finally((){constindexuploading.indexOf(this.uploadChunk)if(index-1)uploading.splice(index,1)}))}// 等待所有分片完成awaitPromise.all(uploading)// 触发合并请求constmergeResultawaitaxios.post(this.mergeUrl,{fileHash:this.fileMd5,fileName:file.name,totalChunks})this.$emit(upload-complete,mergeResult.data)returnmergeResult.data}}}三、信创环境の生存指南浏览器适配// 在main.js中添加信创环境检测Vue.prototype.$isGovBrowser(){constuserAgentnavigator.userAgent.toLowerCase()returnuserAgent.includes(konglong)||userAgent.includes(xinxin)||document.documentElement.style.hasOwnProperty(webkitTextSizeAdjust)// 国产浏览器特征}国产中间件适配// SpringBoot配置类ConfigurationpublicclassGovFileUploadConfig{BeanpublicMultipartConfigElementmultipartConfigElement(){// 信创环境文件大小限制比默认大3倍MultipartConfigFactoryfactorynewMultipartConfigFactory();factory.setMaxFileSize(DataSize.ofGigabytes(10));// 10GBfactory.setMaxRequestSize(DataSize.ofGigabytes(12));returnfactory.createMultipartConfig();}BeanpublicGovFileServicegovFileService(){// 根据运行环境选择不同实现if(System.getProperty(os.name).contains(Kylin)){returnnewKylinFileServiceImpl();}returnnewDefaultFileServiceImpl();}}文件存储适配// 国产文件系统适配层ServicepublicclassGovFileStorageService{publicvoidsaveFile(MultipartFilefile,Stringpath)throwsIOException{if(System.getProperty(gov.fs.type).equals(kylin)){// 使用麒麟系统专用APIKylinFS.getInstance().save(file.getInputStream(),path);}else{// 普通文件存储Files.copy(file.getInputStream(),Paths.get(path),StandardCopyOption.REPLACE_EXISTING);}}}四、项目の现状目前这个方案已经通过龙芯浏览器兼容性测试在银河麒麟系统上稳定运行代码100%开源可审查注释全是武汉方言版获得客户比政务外网还稳定的高度评价唯一的问题是测试时把公司网盘挤爆了现在IT部门看到我就喊“小王啊你那个上传组件能不能限制下速度啊我们备份服务器要跑不动了…”附实际项目中建议使用成熟的国产组件如华为云OBS SDK或阿里云OSS信创版但既然客户要求自研那我们就把造轮子做到让长江水倒流将组件复制到项目中示例中已经包含此目录引入组件配置接口地址接口地址分别对应文件初始化文件数据上传文件进度文件上传完毕文件删除文件夹初始化文件夹删除文件列表参考http://www.ncmem.com/doc/view.aspx?ide1f49f3e1d4742e19135e00bd41fa3de处理事件启动测试启动成功效果数据库效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。批量下载支持文件批量下载下载续传文件下载支持离线保存进度信息刷新页面关闭页面重启系统均不会丢失进度信息。文件夹下载支持下载文件夹并保留层级结构不打包不占用服务器资源。下载示例点击下载完整示例
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

非法网站开发者刑事责任免费企业网站如何建设

第一章:行为树的设计行为树(Behavior Tree)是一种用于建模智能体决策逻辑的层次化结构,广泛应用于游戏AI、机器人控制等领域。其核心思想是将复杂的行为分解为一系列可复用、可组合的节点,通过树形结构组织这些节点&am…

张小明 2026/1/2 23:27:08 网站建设

采购网站模板建投商务

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个蓝屏分析效率对比工具,能够记录用户从上传dmp文件到获得解决方案的全流程时间。要求同时提供传统分析模式(手动查阅文档)和AI辅助模式&a…

张小明 2026/1/2 23:26:36 网站建设

模板建站教程网站开发流程知乎

Windows远程桌面多用户终极攻略:RDP Wrapper完全配置手册 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows系统只能单用户远程连接而苦恼?想在不升级系统版本的情况下实现多用户…

张小明 2026/1/2 23:26:04 网站建设

公司网站建设怎么选择主机大小网站打模块

Maccy完全指南:macOS剪贴板管理器的系统要求与使用建议 【免费下载链接】Maccy Lightweight clipboard manager for macOS 项目地址: https://gitcode.com/gh_mirrors/ma/Maccy Maccy是一款专为macOS设计的轻量级剪贴板管理器,能够帮助用户高效管…

张小明 2026/1/2 23:25:33 网站建设

网站搜索引擎优化报告如何建设网站效果好

venera漫画应用:轻松导入本地漫画的完整指南 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 你知道吗?你珍藏的漫画库可以轻松导入到venera漫画应用中,享受专业的阅读体验。无论你的漫画是…

张小明 2026/1/2 23:25:01 网站建设

关于网站建设的简历模板滁州网站建设价格

第一章:Open-AutoGLM 输入法切换异常处理 在使用 Open-AutoGLM 框架进行多语言输入处理时,部分用户反馈在特定操作系统或桌面环境下出现输入法自动切换失效或误触发的问题。该问题通常表现为候选词无法正常显示、输入焦点丢失或按键响应错乱,…

张小明 2026/1/2 23:24:29 网站建设