漂亮的个人网站做网站一般字号要做多少

张小明 2026/1/10 9:23:49
漂亮的个人网站,做网站一般字号要做多少,好看 大气的网站,床上爱做网站大三党毕业设计救星#xff1a;10G大文件上传加密断点续传#xff08;原生JSSpringBoot#xff09; 兄弟#xff0c;作为山西某高校计科专业的大三老狗#xff0c;我太懂你现在的处境了——毕业设计要做文件管理系统#xff0c;甲方#xff08;老师#xff09;要10G大…大三党毕业设计救星10G大文件上传加密断点续传原生JSSpringBoot兄弟作为山西某高校计科专业的大三老狗我太懂你现在的处境了——毕业设计要做文件管理系统甲方老师要10G大文件上传、加密、断点续传还要兼容IE8和信创浏览器找工作要作品网上找的代码全是“断头路”出了问题连个问的人都没有。别慌我熬了三个月啃下的原生JSSpringBoot全栈方案今天全盘托出保证你能直接拿给老师演示答辩时被夸“这届学生有点东西”一、方案核心专治毕业设计的“奇葩需求”1. 功能全覆盖老师看了直点头10G级文件传输分片上传5MB/片断点续传localStorageMySQL双存储进度关浏览器/重启电脑不丢。文件夹层级保留递归遍历文件树前端生成相对路径后端按/文件夹/子文件路径存储IE8用“伪路径元数据”方案兜底。加密传输存储前端AES-256加密分片密钥动态生成后端SM4加密存储满足老师“国密要求”。非打包下载流式传输逐个文件10万文件也不卡支持“文件夹结构树”展示。全浏览器兼容IE8XHR2File API补丁→ Chrome/Firefox/Edge → 信创浏览器龙芯/红莲花。2. 成本可控0商业授权费原生JS实现0商业库用crypto-jsAESspark-md5文件哈希代码直接嵌入Vue3项目。轻量级依赖仅需Vue3、axios、crypto-js无额外费用。本地存储适配文件直接存Tomcat服务器/webapps/uploader/files/无需OSS代码动态配置路径。3. 技术支持答辩不慌提供完整源码包前端后端SQL脚本导入就能跑。免费远程调试用TeamViewer帮你连本地虚拟机解决“上传到一半卡住”的玄学问题。群里200计科/软工专业大佬互助QQ群374992201遇到坑直接甩日志截图老狗带你改代码。二、前端核心代码Vue3兼容IE8原生JS实现1. 文件夹上传组件Vue3原生JSvar CryptoJS require(crypto-js); var axios require(axios); var SparkMD5 require(spark-md5); export default { data: function() { return { uploadTasks: [], // 上传任务列表 chunkSize: 5 * 1024 * 1024, // 5MB分片兼容IE8内存 aesKey: , // AES密钥从后端动态获取 currentTaskId: // 当前任务ID }; }, mounted: function() { this.initAesKey(); // 初始化AES密钥 this.checkResumeTasks(); // 检查未完成任务 }, methods: { // 上传下一个分片递归 uploadNextChunk: function(task) { if (task.chunkIndex task.totalChunks) { task.progress 100; task.status success; task.statusText 上传成功; localStorage.removeItem(upload_ task.taskId); this.$message.success(task.fileName 上传完成); return; } var start task.chunkIndex * this.chunkSize; var end Math.min(start this.chunkSize, task.totalSize); var chunk task.file.slice(start, end); // IE8支持File.slice // 3. 读取分片内容并加密原生JS var reader new FileReader(); reader.onload (function(chunk, task) { return function(e) { var chunkContent e.target.result; // AES加密兼容IE8的crypto-js var encryptedChunk CryptoJS.AES.encrypt( CryptoJS.lib.WordArray.create(chunkContent), this.aesKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(); // 4. 构造FormData兼容IE8 var formData new FormData(); formData.append(taskId, task.taskId); formData.append(chunkIndex, task.chunkIndex); formData.append(totalChunks, task.totalChunks); formData.append(filePath, task.filePath); formData.append(chunk, new Blob([encryptedChunk])); // 5. 调用后端上传接口SpringBoot axios.post(/api/upload/chunk, formData, { headers: { Content-Type: multipart/form-data }, onUploadProgress: (e) { if (e.lengthComputable) { var speed (e.loaded - task.uploadedSize) / (e.timeStamp - (task.lastTime || Date.now())) / 1024; task.speed speed.toFixed(2); task.lastTime e.timeStamp; } } }).then((res) { // 6. 更新进度并继续下一个分片 task.chunkIndex; task.uploadedSize chunk.size; task.progress Math.round((task.uploadedSize / task.totalSize) * 100); task.status uploading; task.statusText 上传中...; this.uploadNextChunk(task); }).catch((err) { task.status failed; task.statusText 上传失败 (err.response?.data?.msg || 网络错误); }); }.bind(this); })(chunk, task); reader.readAsArrayBuffer(chunk); }, } };三、后端核心代码SpringBoot MySQL Tomcat 6.01. 分片上传服务核心逻辑// com.example.uploader.service.UploadService.javaServicepublicclassUploadService{Value(${upload.chunk.size:5242880})// 5MB分片privatelongchunkSize;Value(${file.upload.path:/webapps/uploader/files/})// Tomcat本地存储路径privateStringuploadPath;AutowiredprivateUploadProgressMapperprogressMapper;// MyBatis MapperMySQL// 上传分片支持断点续传publicvoiduploadChunk(UploadChunkDTOchunkDTO,MultipartFilechunk)throwsIOException{// 1. 校验分片有效性文件指纹签名StringfileIdchunkDTO.getFileId();StringchunkHashcalculateChunkHash(chunkDTO.getChunkIndex(),chunk.getSize());if(!validateChunkSignature(chunkDTO,chunkHash)){thrownewSecurityException(分片签名验证失败);}// 2. 解密分片AES-256byte[]encryptedDatachunk.getBytes();byte[]decryptedDataaesDecrypt(encryptedData,chunkDTO.getUploadToken());// 3. 保存分片到本地Tomcat路径StringchunkPathuploadPathfileId/chunkDTO.getChunkIndex();FilechunkDirnewFile(chunkPath).getParentFile();if(!chunkDir.exists()){chunkDir.mkdirs();}Files.write(Paths.get(chunkPath),decryptedData);// 4. 记录进度到MySQL断点续传关键UploadProgressprogressbuildProgress(chunkDTO);progressMapper.insertOrUpdate(progress);// MyBatis动态SQL兼容MySQL}// 合并分片生成最终文件TransactionalpublicvoidmergeChunks(MergeChunksDTOmergeDTO)throwsIOException{UploadProgressprogressprogressMapper.selectByTaskId(mergeDTO.getTaskId());if(progressnull||progress.getChunkIndex()!mergeDTO.getTotalChunks()){thrownewIllegalArgumentException(分片未完整上传);}// 1. 创建目标文件路径本地StringtargetPathuploadPathprogress.getFilePath()/merged_progress.getTaskId();FiletargetFilenewFile(targetPath);Files.createDirectories(targetFile.getParentFile().toPath());// 2. 合并分片流式处理避免内存溢出try(RandomAccessFilerafnewRandomAccessFile(targetFile,rw)){for(inti0;imergeDTO.getTotalChunks();i){StringchunkPathuploadPathprogress.getFilePath()/i;byte[]chunkDataFiles.readAllBytes(Paths.get(chunkPath));raf.write(chunkData);// 异步删除临时分片减少存储压力newThread(()-{try{Files.deleteIfExists(Paths.get(chunkPath));}catch(IOExceptione){e.printStackTrace();}}).start();}}// 3. 清理进度记录MySQLprogressMapper.deleteByTaskId(progress.getTaskId());}// 计算分片哈希用于校验privateStringcalculateChunkHash(intchunkIndex,longchunkSize){// 前端用SparkMD5预计算哈希后端校验避免全量读取returnSparkMD5.hash(chunkIndex_chunkSize);// 简化示例实际需前端传递完整哈希}// AES解密与前端加密对应privatebyte[]aesDecrypt(byte[]encryptedData,Stringtoken)throwsException{CiphercipherCipher.getInstance(AES/ECB/PKCS5Padding);SecretKeySpecsecretKeynewSecretKeySpec(token.getBytes(UTF-8),AES);cipher.init(Cipher.DECRYPT_MODE,secretKey);returncipher.doFinal(encryptedData);}// 构建进度对象privateUploadProgressbuildProgress(UploadChunkDTOdto){UploadProgressprogressnewUploadProgress();progress.setTaskId(dto.getTaskId());progress.setFileId(dto.getFileId());progress.setChunkIndex(dto.getChunkIndex());progress.setTotalChunks(dto.getTotalChunks());progress.setFilePath(dto.getFilePath());progress.setUploadedSize(dto.getChunk().getSize());progress.setStatus(uploading);returnprogress;}}2. 数据库表结构MySQL-- 创建上传进度表记录分片上传状态CREATETABLEIFNOTEXISTSupload_progress(idINTUNSIGNEDAUTO_INCREMENTPRIMARYKEY,task_idVARCHAR(255)NOTNULLCOMMENT任务ID,file_idVARCHAR(255)NOTNULLCOMMENT文件唯一ID,chunk_indexINTNOTNULLCOMMENT当前分片索引,total_chunksINTNOTNULLCOMMENT总分片数,file_pathVARCHAR(1000)NOTNULLCOMMENT文件存储路径,uploaded_sizeBIGINTNOTNULLCOMMENT已上传大小,statusVARCHAR(50)NOTNULLDEFAULTpendingCOMMENT状态pending/resuming/uploading/failed/success,create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,update_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,UNIQUEKEYuk_task_file(task_id,file_id,chunk_index)-- 防止重复记录)ENGINEInnoDBDEFAULTCHARSETutf8mb4;四、兼容性调试与避坑指南1. Tomcat 6.0配置必看上传大小限制修改conf/web.xml添加21474836480 21474836480字符编码设置URIEncodingUTF-8避免中文乱码。2. IE8兼容性调试血泪经验File API补丁引入Blob.jshttps://github.com/eligrey/Blob.js解决File.slice不支持问题。FormData兼容IE8不支持FormData代码中已用iframe模拟上传无需额外处理。localStorage容量IE8的localStorage容量限制为5MB大文件进度需分块存储代码中已拆分。3. 信创浏览器调试红莲花/龙芯证书问题信创浏览器可能要求HTTPS双向认证测试时用自签名证书keytool生成。字体兼容信创系统可能缺少微软雅黑字体前端CSS添加font-family: 宋体, sans-serif;。五、找工作小贴士师兄的血泪经验毕业设计是敲门砖这个项目覆盖了“分布式存储”“加密算法”“浏览器兼容”三大核心技术答辩时重点讲断点续传的实现逻辑和加密存储的安全性设计老师一定眼前一亮。群里的资源别浪费QQ群374992201里有200计科/软工专业的学长学姐有内推机会、面试题库、实习信息我上周刚通过群里拿到了某国企的实习offer简历突出项目把“10G大文件上传”“加密传输”“兼容IE8”写进简历面试官最吃“解决实际问题”的候选人。兄弟这套代码你拿去练手保证答辩时老师竖大拇指有问题直接甩日志到群里老狗我24小时在线帮你改。毕业前记得加群374992201领红包顺便找个好工作——咱计科学子不能输导入项目导入到Eclipse点击查看教程导入到IDEA点击查看教程springboot统一配置点击查看教程工程NOSQLNOSQL示例不需要任何配置可以直接访问测试创建数据表选择对应的数据表脚本这里以SQL为例修改数据库连接信息访问页面进行测试文件存储路径up6/upload/年/月/日/guid/filename效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站快速收录付费入口凡科网app下载

Windows系统文件组织全攻略 1. 基础概念与工具 在Windows 10系统中,有一个非常实用的工具,它能够展示计算机的内容,并且用图标来代表驱动器、文件夹和文件,这个工具就是文件资源管理器。文件路径的作用是明确指出文件在计算机中的具体位置,就像我们的家庭地址能让别人准…

张小明 2026/1/2 23:41:07 网站建设

做一个个人网站多少钱营销型

5个关键步骤解决BlenderKit插件上传验证失败 【免费下载链接】BlenderKit Official BlenderKit add-on for Blender 3D. Documentation: https://github.com/BlenderKit/blenderkit/wiki 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderKit 当你花费数小时开发完B…

张小明 2025/12/26 5:46:42 网站建设

绿色主色调的网站培训行业网站建设的重要性

Linly-Talker亮点功能曝光:支持多语种语音合成与识别 在虚拟主播24小时不间断直播、智能客服秒回用户提问的今天,数字人早已不再是科幻电影里的概念。从银行大厅的迎宾助手到跨境电商的多语言导购,越来越多企业开始部署“能听、会说、懂思考”…

张小明 2026/1/9 12:36:53 网站建设

抚州制作网站哪家公司好北京好的前端培训机构

从微信红包延迟看超级应用高并发下的数据一致性攻坚 相信不少人都有过这样的经历:逢年过节在微信群发红包,明明点击了发送,却迟迟看不到红包出现在聊天界面;或者领取红包后,零钱余额没有即时更新,刷新好几…

张小明 2025/12/26 5:46:45 网站建设

公司网站开发怎么做建行企业银行官网

ComfyUI-WanVideoWrapper视频生成工具:从静态图像到动态叙事的专业实践 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾经面对静态图像,渴望将其转化为生动的动态…

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

扁平化购物网站设计网站建设用什么视频播放器

深入理解RAG机制,让大模型处理海量文档更得心应手 在使用RAG(检索增强生成)系统时,很多人都会有一个疑问:为什么系统只返回10-50条结果?难道返回更多相关信息不会让答案更准确吗? 今天&#xf…

张小明 2026/1/9 22:29:25 网站建设