航空航天Web服务SpringBoot如何实现卫星数据大文件夹的秒传断点续传?
叼着棒棒糖敲键盘版各位大佬好呀我是福州某大学卷王专业·软件工程·大三·正在为毕业设计抓秃头的·小菜鸡。最近被导师按头要求搞个能上传10G文件还带加密的文件夹传输系统美其名曰锻炼抗压能力实则想看我表演当场去世手动狗头 前端の奇幻漂流Vue3原生JS魔改版// 魔改后的WebUploader核心片段支持IE8的降级方案classMagicUploader{constructor(options){this.chunks[];this.browserthis.detectBrowser();// 检测浏览器类型this.initFileInput();// 兼容IE8的文件输入}detectBrowser(){constuanavigator.userAgent;if(ua.indexOf(MSIE 8)-1)returnie8;if(ua.indexOf(Trident/7)-1)returnie11;returnmodern;}// 文件夹上传核心逻辑递归遍历FileListhandleFolderUpload(files){if(this.browserie8){alert(IE8用户请使用Chrome体验完整功能);return;}constfileTreethis.buildFileTree(files);// 构建树形结构this.encryptTree(fileTree).then(encryptedTree{this.sliceAndUpload(encryptedTree);// 切片上传});}// 魔改版分片上传带断点续传sliceAndUpload(fileNode){constchunkSize5*1024*1024;// 5MB分片constfilefileNode.file;consttotalChunksMath.ceil(file.size/chunkSize);// 从localStorage恢复进度constsavedProgresslocalStorage.getItem(progress_${file.name});letstartChunksavedProgress?parseInt(savedProgress):0;for(letistartChunk;itotalChunks;i){constblobfile.slice(i*chunkSize,(i1)*chunkSize);constformDatanewFormData();formData.append(file,blob);formData.append(chunkIndex,i);formData.append(totalChunks,totalChunks);formData.append(fileId,this.generateFileId(file));// 使用XMLHttpRequest兼容IEconstxhrnewXMLHttpRequest();xhr.open(POST,/api/upload,true);xhr.onload(){if(xhr.status200){localStorage.setItem(progress_${file.name},i1);if(itotalChunks-1){this.mergeChunks(fileNode);// 所有分片上传完成}}};xhr.send(formData);}}} 后端の黑暗料理SpringBoot特供版// 文件分片接收控制器支持加密存储RestControllerRequestMapping(/api)publicclassFileUploadController{AutowiredprivateOSSClientossClient;PostMapping(/upload)publicResponseEntityhandleChunk(RequestParam(file)MultipartFilefile,RequestParam(chunkIndex)intchunkIndex,RequestParam(fileId)StringfileId){try{// 解密分片伪代码byte[]decryptedBytesCryptoUtil.decrypt(file.getBytes());// 存储到临时目录StringtempPath/tmp/fileId/chunkIndex;Files.write(Paths.get(tempPath),decryptedBytes);returnResponseEntity.ok(Chunk saved);}catch(Exceptione){returnResponseEntity.status(500).body(Upload failed);}}// 合并分片阿里云OSS实现PostMapping(/merge)publicResponseEntitymergeChunks(RequestBodyMergeRequestrequest){StringobjectKeyencrypted/request.getFileId().dat;// 从OSS合并实际项目需要更复杂的逻辑ossClient.initiateMultipartUpload(newInitiateMultipartUploadRequest(your-bucket,objectKey));// ... 省略100行OSS合并代码 ...returnResponseEntity.ok(File merged successfully);}} 生存指南血泪经验IE8兼容性使用的降级方案引入es5-shim和json2.js垫片放弃CSS3动画改用jQuery动画断点续传用localStorage存储进度IE8可用服务器端需要记录已上传的分片合并前校验所有分片完整性加密传输前端用CryptoJS加密注意性能后端解密后重新加密存储传输使用HTTPS阿里云免费证书面试吹牛技巧“这个系统支持万亿级文件传输”实际最多10G“采用区块链技术加密”其实就是AES“通过量子计算优化分片算法”其实随机切的 紧急求助现在系统存在以下致命问题IE8上传超过2GB文件会崩溃文件夹层级超过5层会丢失结构加密后的文件在OSS无法预览合并分片时偶尔会丢数据求各位大佬加群374992201拯救现在入群可享免费获得价值998元的《如何在毕业设计里混过去》电子书参与帮学弟改BUG活动赢取奶茶基金推荐工作成功送《职场舔狗指南》纸质版突然正经PS真的求工作推荐本人擅长熬夜改BUG背锅不推卸写注释骗评审PPT画大饼联系方式QQ群374992201暗号我要毕业SQL示例创建数据库配置数据库连接自动下载maven依赖启动项目启动成功访问及测试默认页面接口定义在浏览器中访问数据表中的数据效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。示例下载下载完整示例
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2410637.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!