查网站域名备案价格网站建设开票名称

张小明 2026/1/8 22:45:45
查网站域名备案价格,网站建设开票名称,建设一个教程视频网站需要什么资质,国外高清人像图片素材网站陕西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进行投诉反馈,一经查实,立即删除!

深圳优化公司找高粱seo服务厦门网站seo外包

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/7 18:31:17 网站建设

福州网站关键词网站过期原因

如何通过LoRA微调增强Wan2.2-T2V-5B特定风格能力 你有没有遇到过这种情况:输入“赛博朋克城市夜景,霓虹灯在雨中闪烁”,结果模型生成的画面却像极了某部国产都市情感剧的街景?🤔 尤其是用轻量级T2V模型时,…

张小明 2026/1/8 0:18:19 网站建设

网站建设公司税率什么网站可以做头像

如何打造终极自定义阅读体验:Legado开源阅读器完全指南 【免费下载链接】legado Legado 3.0 Book Reader with powerful controls & full functions❤️阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具,为广大网络文学爱好者提供一种方便、快捷…

张小明 2026/1/6 0:32:18 网站建设

帮忙做ppt的网站公司企业模板

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作交互式Linux新手教程,包含:1. 3D文件系统可视化演示 2. 拖拽式命令构建器 3. 实时命令效果动画展示 4. 安全沙箱环境 5. 成就系统激励学习。使用Three.j…

张小明 2026/1/4 13:01:40 网站建设

铜川商城网站建设南通网站建设兼职

探索 Unix 世界:哲学、骗局与设计理念 1. Unix 带来的启迪 Unix 能让我们领悟万物的短暂本质,帮助我们摆脱世俗的执着,加速心灵的启迪。比如,有人在研究 X 初始化脚本时,看到带有 “exec” 前缀的 Unix 命令,出于好奇在 shell 窗口输入 “exec ls”,结果列出目录后,s…

张小明 2026/1/6 0:32:41 网站建设

学做网站论坛熊掌深圳网站制作公司资讯

Excalidraw用户行为分析数据收集方式 在远程协作日益成为主流工作模式的今天,团队对可视化沟通工具的需求已从“能用”转向“好用”——不仅要支持快速表达想法,更要能理解用户的意图、适应协作节奏,甚至主动辅助创作。Excalidraw 正是在这一…

张小明 2026/1/6 0:32:55 网站建设