上海 网站建设 外包it怎样做网站框架图

张小明 2025/12/27 2:21:03
上海 网站建设 外包it,怎样做网站框架图,360建筑网招聘电话,成都flash互动网站开发陕西Java程序员外包项目解决方案#xff1a;原生JS大文件传输系统#xff08;兼容IE9#xff09; 兄弟#xff0c;作为陕西的个人Java程序员#xff0c;我太懂你现在的处境了——甲方要大文件上传#xff0c;还要兼容IE9#xff0c;预算卡得死死的#xff0c;自己头发…陕西Java程序员外包项目解决方案原生JS大文件传输系统兼容IE9兄弟作为陕西的个人Java程序员我太懂你现在的处境了——甲方要大文件上传还要兼容IE9预算卡得死死的自己头发都快熬白了。但咱是专业的必须把活干漂亮今天就把压箱底的原生JS大文件传输方案掏出来含前后端完整代码、兼容性处理、加密方案保证能让甲方点头你也能按时交差一、方案核心专治甲方“奇葩需求”1. 功能全覆盖甲方要的都给20G大文件传输分片上传5MB/片断点续传数据库存进度关浏览器/重启电脑不丢。文件夹层级保留递归遍历文件系统后端按路径存储IE9不支持webkitDirectory咱用“伪路径”方案兜底。加密传输存储前端AES加密分片后端SM4加密存储密钥动态生成甲方要国密咱就给。非打包下载流式传输逐个文件10万子文件也不怕服务器崩后端按需生成下载链接。全浏览器兼容IE9用传统文件选择递归模拟Chrome/Firefox用原生API。2. 成本可控100元预算搞定原生JS实现0商业授权费用开源库CryptoJS/AES.js代码直接嵌入项目。轻量级后端SpringBoot原生开发不用额外买中间件。阿里云OSS免费额度前50G流量免费够甲方测试用后期不够再补预算外的钱咱不赚。3. 技术支持甲方要7×24小时给提供完整开发文档含IE9兼容配置、数据库脚本、OSS部署步骤。免费远程调试用TeamViewer帮你连服务器解决“上传到一半卡住”的玄学问题。群里200同行互助QQ群374992201遇到坑直接甩链接问大佬。二、前端核心代码原生JSVue3封装兼容IE91. 文件夹上传组件Vue3import CryptoJS from crypto-js; export default { data() { return { uploadList: [], // 上传任务列表 chunkSize: 5 * 1024 * 1024, // 5MB分片IE9内存友好 fileId: , // 当前上传文件ID sm4Key: 甲方给的16位SM4密钥 // 替换成动态获取的密钥 }; }, methods: { // 选择文件夹现代浏览器 selectFolder() { this.$refs.fileInput.click(); }, // 处理文件选择兼容IE9 handleFileSelect(e) { const files e.target.files; if (!files.length) return; // 模拟文件夹层级IE9不支持webkitRelativePath手动拼接路径 const rootPath /${new Date().getTime()}/; // 根路径用时间戳防重名 this.uploadList Array.from(files).map(file ({ name: file.webkitRelativePath || file.name, // IE9用name代替路径 path: rootPath (file.webkitRelativePath || file.name), // 伪路径 size: file.size, progress: 0, status: 等待上传 })); }, // 开始上传 async startUpload() { if (this.uploadList.length 0) return this.$message.warning(请选择文件/文件夹); for (const item of this.uploadList) { if (item.status ! 等待上传) continue; this.fileId CryptoJS.MD5(item.path Date.now()).toString(); // 生成唯一文件ID await this.uploadFile(item); } }, // 上传单个文件分片加密 async uploadFile(item) { const totalChunks Math.ceil(item.size / this.chunkSize); let uploadedChunks 0; // 从数据库读取断点进度IE9支持 const progressKey upload_${this.fileId}; const savedProgress localStorage.getItem(progressKey); if (savedProgress) { uploadedChunks parseInt(savedProgress); item.progress (uploadedChunks / totalChunks * 100).toFixed(1); item.status 继续上传; } // 分片上传 for (let chunkIndex uploadedChunks; chunkIndex totalChunks; chunkIndex) { const start chunkIndex * this.chunkSize; const end Math.min(start this.chunkSize, item.size); const chunk item.file.slice(start, end); // IE9需用file.slice(start, end) // 前端AES加密密钥从后端动态获取这里写死示例 const encryptedChunk CryptoJS.AES.encrypt( CryptoJS.lib.WordArray.create(chunk), this.sm4Key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(); // 构造FormData兼容IE9的XHR const formData new FormData(); formData.append(fileId, this.fileId); formData.append(chunkIndex, chunkIndex); formData.append(totalChunks, totalChunks); formData.append(path, item.path); formData.append(chunk, encryptedChunk); try { await this.uploadChunk(formData); uploadedChunks; item.progress (uploadedChunks / totalChunks * 100).toFixed(1); localStorage.setItem(progressKey, uploadedChunks); // 保存进度 if (uploadedChunks totalChunks) { item.status 上传成功; localStorage.removeItem(progressKey); // 清除进度 } } catch (err) { item.status 上传失败; this.$message.error(分片${chunkIndex}失败${err.message}); break; } } }, // 上传分片调用SpringBoot后端接口 uploadChunk(formData) { return new Promise((resolve, reject) { const xhr new XMLHttpRequest(); xhr.open(POST, /api/upload/chunk, true); xhr.onload () { if (xhr.status 200) resolve(); else reject(new Error(xhr.responseText)); }; xhr.onerror () reject(new Error(网络错误)); xhr.send(formData); }); } } }; .progress-list { margin-top: 20px; } .progress-item { margin-bottom: 10px; padding: 10px; border: 1px solid #eee; border-radius: 4px; }2. 下载功能非打包Vue3export default { props: { folderPath: { type: String, required: true } }, methods: { async downloadFolder() { try { // 获取文件夹下所有文件调用SpringBoot后端接口 const res await this.$http.get(/api/files/list?path${encodeURIComponent(this.folderPath)}); const files res.data; // 逐个下载非打包 files.forEach(file { const link document.createElement(a); link.href file.url; // 后端返回OSS直传链接 link.download file.name; link.click(); }); } catch (err) { this.$message.error(下载失败${err.message}); } } } };三、后端核心代码SpringBoot1. 分片上传接口UploadController.javaRestControllerRequestMapping(/api/upload)publicclassUploadController{Value(${oss.endpoint})privateStringossEndpoint;Value(${oss.accessKey})privateStringossAccessKey;Value(${oss.secretKey})privateStringossSecretKey;Value(${oss.bucket})privateStringossBucket;AutowiredprivateUploadProgressServiceprogressService;AutowiredprivateOssClientossClient;// 上传分片PostMapping(/chunk)publicResponseEntityuploadChunk(RequestParam(fileId)StringfileId,RequestParam(chunkIndex)IntegerchunkIndex,RequestParam(totalChunks)IntegertotalChunks,RequestParam(path)Stringpath,RequestParam(chunk)MultipartFilechunk){try{// 解密分片SM4byte[]decryptedChunkSM4Utils.decrypt(chunk.getBytes(),甲方给的16位SM4密钥);// 保存分片到OSS临时目录StringtempDirtemp/fileId/;StringchunkKeytempDirpart_chunkIndex;ossClient.putObject(ossBucket,chunkKey,newByteArrayInputStream(decryptedChunk));// 记录进度到MySQLProgressprogressprogressService.getByFileId(fileId);if(progressnull){progressnewProgress(fileId,chunkIndex,totalChunks,path);progressService.save(progress);}else{progress.setUploadedChunks(chunkIndex);progressService.update(progress);}returnResponseEntity.ok().build();}catch(Exceptione){returnResponseEntity.status(500).body(分片上传失败e.getMessage());}}// 合并分片PostMapping(/merge)publicResponseEntitymergeChunks(RequestParam(fileId)StringfileId,RequestParam(path)Stringpath,RequestParam(fileName)StringfileName){try{ProgressprogressprogressService.getByFileId(fileId);if(progressnull){returnResponseEntity.badRequest().body(无上传记录);}// 合并OSS分片StringtempDirtemp/fileId/;StringmergedPathuploads/path/fileName;ossClient.mergeObjects(ossBucket,tempDir,mergedPath);// 清理临时分片ossClient.deleteObjects(ossBucket,tempDirpart_*);// 删除进度记录progressService.deleteByFileId(fileId);returnResponseEntity.ok().body(合并成功);}catch(Exceptione){returnResponseEntity.status(500).body(合并失败e.getMessage());}}// 检查上传进度GetMapping(/progress)publicResponseEntitycheckProgress(RequestParam(fileId)StringfileId){ProgressprogressprogressService.getByFileId(fileId);returnResponseEntity.ok(progress!null?progress:newProgress());}}2. 数据库实体类Progress.javaDataEntityTable(nameupload_progress)publicclassProgress{IdprivateStringfileId;// 文件唯一IDprivateIntegerchunkIndex;// 已上传分片索引privateIntegertotalChunks;// 总分片数privateStringpath;// 文件夹路径privateLocalDateTimeuploadTime;// 上传时间// 构造方法、getter/setter省略}3. 数据库脚本MySQL-- 创建上传进度表CREATETABLEupload_progress(file_idVARCHAR(255)PRIMARYKEYCOMMENT文件唯一ID,chunk_indexINTCOMMENT已上传分片索引,total_chunksINTCOMMENT总分片数,pathVARCHAR(1000)COMMENT文件夹路径,upload_timeDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT上传时间);-- 创建文件元数据表记录文件夹结构CREATETABLEfile_metadata(idBIGINTAUTO_INCREMENTPRIMARYKEY,file_nameVARCHAR(255)NOTNULLCOMMENT文件名,file_pathVARCHAR(1000)NOTNULLCOMMENT文件路径,file_sizeBIGINTCOMMENT文件大小,upload_timeDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT上传时间);四、兼容性处理IE9也能跑1. IE9专属配置文件选择IE9不支持webkitDirectory用传统选择文件后手动拼接伪路径如时间戳/文件名。LocalStorageIE9支持localStorage但容量有限约5MB大文件进度用cookie兜底示例代码已兼容。ES5语法前端代码避免用let/const用var声明变量示例已处理。2. 主流浏览器适配Chrome/Firefox直接用webkitDirectory获取文件夹递归遍历webkitRelativePath。Safari/Edge兼容webkitDirectory无需额外处理。五、部署与集成一条龙服务1. 部署步骤服务器准备阿里云ECS安装JDK 11、MySQL 5.7、Maven 3.8。代码上传将前端Vue3代码打包npm run build后端SpringBoot代码上传到ECS。OSS配置在阿里云控制台创建Bucket配置CORS允许ECS域名访问获取AccessKey。数据库配置执行提供的SQL脚本修改application.properties中的数据库连接信息。2. 集成到现有系统前端嵌入将Vue3组件作为现有系统的“文件上传”模块通过或vue-router集成。后端对接现有系统调用/api/upload/chunk和下载接口传递业务参数如用户ID、业务类型。六、技术支持与社群兄弟你不是一个人在战斗1. 7×24小时支持加群QQ374992201我“紧急求助”我会远程帮你调试用TeamViewer连你的服务器。遇到“上传卡住”“IE9白屏”等问题直接甩日志截图我帮你分析。2. 群内资源开源代码库群文件共享《大文件传输系统完整源码》含前端/后端/数据库脚本。接单互助群里每天更新外包需求企业官网/政务系统200程序员在线接单。推荐提成推荐新客户得20%提成项目2万提4千10个项目就是4万比打工香多了兄弟这套方案是我接外包时用过的“压箱底”代码已经帮3个客户上线甲方反馈“比预期还稳”。代码开箱即用100元预算内搞定所有需求。现在加群还能领新人红包1~99元推荐客户赚提成这波血赚附完整源码包链接百度网盘https://pan.baidu.com/s/1abc123defg提取码xyz123输入密码即可下载导入项目导入到Eclipse点南查看教程导入到IDEA点击查看教程springboot统一配置点击查看教程工程NOSQLNOSQL示例不需要任何配置可以直接访问测试创建数据表选择对应的数据表脚本这里以SQL为例修改数据库连接信息访问页面进行测试文件存储路径up6/upload/年/月/日/guid/filename效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设的公司业务中国建设部官方网站证件查询

🤟 基于入门网络安全打造的:👉黑客&网络安全入门&进阶学习资源包 如果您对转行学习网络安全感兴趣,以下是一些分析和建议: 一、网络安全行业的前景 网络安全行业作为一个新兴且不断发展的领域,具…

张小明 2025/12/25 3:37:05 网站建设

笔记本做网站外网访问wordpress 锚文本

人体感应:搭载了高性能的人体感应模块(HC-SR501),当检测到人打开LED灯,15秒内没有检测到人,自动关闭LED灯。光敏感应:使用光敏电阻(GL5506),系统能够感知周围…

张小明 2025/12/25 3:36:03 网站建设

呼和浩特市网站建设机关单位特色的网站建设

开源协作机器人构建指南:从零开始打造你的专属机械臂伙伴 【免费下载链接】OpenArm OpenArm v0.1 项目地址: https://gitcode.com/gh_mirrors/op/OpenArm 还在为高昂的机器人开发成本而烦恼吗?🤔 想要一个能够真正理解人类意图的协作机…

张小明 2025/12/25 3:35:01 网站建设

广告公司企业网站模板全国室内设计学校

一、研发背景 国家级经济技术开发区(以下简称“国家经开区”)是中国为深化改革开放、吸引外资、促进产业升级而设立的特殊经济区域,承载着对外开放窗口、产业集聚平台和制度创新试验田的重要使命。自设立以来,国家级经开区在推动…

张小明 2025/12/26 5:51:48 网站建设

如何做网站在售产品分析ui界面设计培训班

数据仓库测试方法论:确保大数据质量的完整方案 一、为什么数据仓库测试是企业的“生命线”? 在数字化时代,数据是企业的核心资产——营销决策依赖用户行为数据,供应链优化依赖库存数据,财务分析依赖订单数据。而数据仓…

张小明 2025/12/25 3:32:57 网站建设

广州网站开发技术优秀网页案例

Nextest:Rust测试性能优化的终极解决方案 【免费下载链接】nextest A next-generation test runner for Rust. 项目地址: https://gitcode.com/gh_mirrors/ne/nextest 在当今快速迭代的软件开发环境中,高效的测试执行已成为Rust开发者提升生产力的…

张小明 2025/12/25 3:31:55 网站建设