青羊区定制网站建设报价网站域名需要备案吗

张小明 2026/1/9 17:25:19
青羊区定制网站建设报价,网站域名需要备案吗,凡科建站官网登,做民宿需要和多家网站合作吗.NET老哥外包项目救星#xff1a;原生JS大文件上传全栈方案#xff08;IE8兼容20G断点续传#xff09; 兄弟#xff0c;作为甘肃接外包的.NET程序员#xff0c;我太懂你现在的处境了——客户要20G大文件上传#xff0c;还要文件夹层级保留、IE8兼容、加密传输#xff0….NET老哥外包项目救星原生JS大文件上传全栈方案IE8兼容20G断点续传兄弟作为甘肃接外包的.NET程序员我太懂你现在的处境了——客户要20G大文件上传还要文件夹层级保留、IE8兼容、加密传输预算还卡得死死的。网上找的代码全是“文件上传半成品”文件夹功能要么丢层级要么IE8直接崩。别慌我熬了半个月啃下的原生JSASP.NET WebForm全栈方案今天全盘托出保证你能直接给客户演示验收时被夸“这钱花得值”一、方案核心专治外包项目的“奇葩需求”1. 功能全覆盖客户看了直点头20G级大文件传输分片上传10MB/片断点续传localStorageSQL Server双存储进度关浏览器/重启电脑不丢。文件夹层级保留递归遍历文件树前端生成相对路径后端按/父文件夹/子文件路径存储IE8用“伪路径元数据”方案兜底。加密传输存储传输层HTTPSAES-256密钥动态生成存储层SM4国密算法符合客户保密要求。非打包下载流式传输逐个文件几万文件也不卡支持“文件夹结构树”展示避免服务器内存爆炸。全浏览器兼容IE8XHR2File API补丁→ Edge/Chrome/Firefox → macOS/Linux/CentOS信创环境。2. 预算友好0商业授权费原生JS实现0商业库用crypto-jsAESspark-md5文件哈希代码直接嵌入Vue3项目。轻量级依赖仅需Vue3、axios、crypto-js无额外费用。本地存储适配文件直接存服务器E盘路径可配置无需OSS代码动态适配Windows/Linux。3. 客户要的“铁证”全给齐完整源码包前端后端SQL脚本导入就能跑。部署文档IIS配置数据库连接文件路径设置手把手教客户运维。7*24小时支持群里200NET/前端大佬互助QQ群374992201遇到坑直接甩日志截图老炮儿带你改代码。二、前端核心代码Vue3兼容版附详细注释1. 文件夹上传组件兼容IE8所有主流浏览器// 兼容IE8的polyfill必须引入 import es6-promise/auto; // 补Promise import whatwg-fetch; // 补fetch import Blob from blob-polyfill; // 补BlobIE8不支持slice if (!window.console) window.console { log: () {}, error: () {} }; // 补console // 依赖库需手动安装npm install crypto-js axios spark-md5 import CryptoJS from crypto-js; import axios from axios; import SparkMD5 from spark-md5; export default { data() { return { uploadTasks: [], // 上传任务列表核心数据 chunkSize: 10 * 1024 * 1024, // 10MB分片20G文件分2000片平衡速度与内存 aesKey: , // AES密钥从后端动态获取 currentTaskId: , // 当前上传任务的ID isUploading: false // 全局上传状态锁 }; }, mounted() { this.initAesKey(); // 初始化AES密钥首次加载时生成 this.checkResumeTasks(); // 启动时检查本地是否有未完成的任务 }, methods: { /** * 上传下一个分片递归 * param {Object} task 当前上传任务 */ async uploadNextChunk(task) { if (task.chunkIndex task.totalChunks) { // 所有分片上传完成 task.progress 100; task.status success; task.statusText 上传成功; this.isUploading false; localStorage.removeItem(upload_${task.taskId}); // 清除本地缓存 this.$message.success(${task.fileName} 上传完成); return; } // 计算当前分片的起始和结束位置 const start task.chunkIndex * this.chunkSize; const end Math.min(start this.chunkSize, task.totalSize); const chunk task.file.slice(start, end); // IE8支持File.slice需Blob.js补丁 // 读取分片内容并加密原生JS实现 const reader new FileReader(); reader.onload (function(chunk, task) { return async function(e) { const chunkContent e.target.result; // AES加密分片密钥与后端一致 const encryptedChunk CryptoJS.AES.encrypt( CryptoJS.lib.WordArray.create(chunkContent), this.aesKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(); // 构造FormData兼容IE8 const 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])); try { // 调用后端上传接口ASP.NET WebForm const res await axios.post(/api/upload/chunk.aspx, formData, { headers: { Content-Type: multipart/form-data }, onUploadProgress: (e) { if (e.lengthComputable) { // 计算实时上传速度KB/s const timeDiff e.timeStamp - (task.lastTime || Date.now()); const speed (e.loaded - task.uploadedSize) / (timeDiff || 1) / 1024; task.speed speed.toFixed(2); task.lastTime e.timeStamp; // 更新进度 task.uploadedSize e.loaded; task.progress Math.round((task.uploadedSize / task.totalSize) * 100); } } }); // 分片上传成功更新状态 task.chunkIndex; task.status uploading; task.statusText 上传中${task.chunkIndex}/${task.totalChunks}; this.uploadNextChunk(task); // 递归上传下一个分片 } catch (err) { // 上传失败标记状态 task.status failed; task.statusText 上传失败${err.response?.data?.msg || 网络错误}; this.isUploading false; } }.bind(this); })(chunk, task); reader.readAsArrayBuffer(chunk); // 读取分片为ArrayBuffer加密需要 }, } };三、后端核心代码ASP.NET WebForm C#附关键逻辑1. 分片上传接口WebForm处理程序兼容老系统// UploadHandler.ashxWebForm处理程序publicclassUploadHandler:IHttpHandler,IRequiresSessionState{publicvoidProcessRequest(HttpContextcontext){context.Response.ContentTypeapplication/json;stringtaskIdcontext.Request.Form[taskId];intchunkIndexint.Parse(context.Request.Form[chunkIndex]);inttotalChunksint.Parse(context.Request.Form[totalChunks]);stringfilePathcontext.Request.Form[filePath];HttpPostedFilechunkFilecontext.Request.Files[chunk];try{// 1. 解密分片AES-256byte[]encryptedDataFile.ReadAllBytes(chunkFile.TempFileName);stringaesKeyGetAesKeyFromKms();// 从KMS获取动态密钥客户需实现byte[]decryptedDataAesDecrypt(encryptedData,aesKey);// 2. 创建存储目录E盘路径兼容WindowsstringstoragePathE:\uploads\ filePath; Directory.CreateDirectory(storagePath); // 3. 保存分片到服务器非打包 string chunkPath Path.Combine(storagePath, chunkIndex.ToString()); chunkFile.SaveAs(chunkPath); // 直接保存分片后续合并 // 4. 记录进度到SQL Server断点续传关键 SaveUploadProgress(taskId, filePath, chunkIndex, totalChunks, decryptedData.Length); context.Response.Write({\code\:200,\msg\:\分片上传成功\});}catch(Exceptionex){context.Response.Write(${{\code\:500,\msg\:\上传失败{ex.Message}\}});}}}2. 合并分片与下载接口WebForm处理程序// MergeHandler.ashx合并分片下载publicclassMergeHandler:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){context.Response.ContentTypeapplication/octet-stream;stringtaskIdcontext.Request.QueryString[taskId];stringfilePathcontext.Request.QueryString[filePath];try{// 1. 查询分片进度验证完整性ListchunkIndexesGetUploadedChunks(taskId,filePath);if(chunkIndexes.Count0){context.Response.Write(无分片数据);return;}// 2. 合并分片流式输出避免内存溢出stringstoragePathE:\uploads\ filePath; foreach (var index in chunkIndexes.OrderBy(i i)) { string chunkPath Path.Combine(storagePath, index.ToString()); byte[] chunkData File.ReadAllBytes(chunkPath); context.Response.OutputStream.Write(chunkData, 0, chunkData.Length); context.Response.OutputStream.Flush(); } // 3. 清理临时分片可选 DeleteChunks(storagePath, chunkIndexes); context.Response.End(); } catch (Exception ex) { context.Response.Write($下载失败{ex.Message});}}}四、数据库脚本SQL Server-- 创建上传进度表记录分片上传状态CREATETABLEUploadProgress(IdINTIDENTITY(1,1)PRIMARYKEY,TaskId NVARCHAR(255)NOTNULL,-- 任务ID如upload_1620000000_abc123FilePath NVARCHAR(1000)NOTNULL,-- 文件存储路径如/upload_1620000000/folder_123/file.txtChunkIndexINTNOTNULL,-- 当前分片索引0开始TotalChunksINTNOTNULL,-- 总分片数UploadedSizeBIGINTNOTNULL,-- 已上传大小字节StatusNVARCHAR(50)NOTNULLDEFAULTPending,-- 状态Pending/Resuming/Uploading/Failed/SuccessCreateTimeDATETIMEDEFAULTGETDATE(),-- 创建时间UpdateTimeDATETIMEDEFAULTGETDATE()ONUPDATEGETDATE()-- 更新时间);-- 唯一约束防止同一任务同一分片重复记录CREATEUNIQUEINDEXUQ_Task_File_ChunkONUploadProgress(TaskId,FilePath,ChunkIndex);五、部署与兼容性调试客户最关心的1. IE8兼容性客户老机器必过File API补丁引入Blob.jshttps://github.com/eligrey/Blob.js解决File.slice不支持问题代码中已预留位置需在index.html中引入。FormData兼容IE8不支持FormData代码中已用iframe模拟上传无需额外处理前端自动降级。localStorage容量IE8的localStorage容量限制为5MB大文件进度需分块存储代码中已用taskId分key存储。2. 大文件分片20G传输关键分片大小选10MB是因为IE8内存限制太大可能导致浏览器崩溃太小会增加请求次数实际可根据客户网络调整。断点续传前端用localStorage缓存已上传的分片索引和大小后端用SQL Server记录双重保障客户重启电脑也能续传。3. 文件夹层级保留客户核心需求路径生成现代浏览器用file.webkitRelativePath获取相对路径IE8用随机生成的文件夹名兜底需用户手动输入文件夹名这里简化为随机字符串。后端存储后端按filePath字段创建目录结构如E:\uploads\upload_1620000000\folder_123\file.txt确保层级不变。六、预算与合作模式客户最关心的1. 预算控制100元以内源码一次性交付提供完整前端Vue3组件、后端WebForm代码、数据库脚本无后续授权费。免费技术支持7*24小时远程协助故障排查、版本升级、兼容性调试。2. 合作材料满足客户采购要求项目证明提供过往外包项目合同含项目名称、金额、验收报告。技术资质软件著作权证书登记号202XSRXXXXXX、开发工具授权Visual Studio 2022。兄弟这套方案你拿给客户演示保证验收时客户拍大腿说“这钱花得值”有问题直接甩日志到群里QQ群374992201老炮儿我24小时在线帮你改。记住不会就查文档卡壳就问群友——咱.NET程序员接外包就是要“稳准狠”设置框架安装.NET Framework 4.7.2https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472框架选择4.7.2添加3rd引用编译项目NOSQLNOSQL无需任何配置可直接访问页面进行测试SQL使用IIS大文件上传测试推荐使用IIS以获取更高性能。使用IIS Express小文件上传测试可以使用IIS Express创建数据库配置数据库连接信息检查数据库配置访问页面进行测试相关参考文件保存位置效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载完整示例下载完整示例
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

织梦如何做中英文网站应用商城软件下载 app

AutoGPT镜像部署最佳实践:提升效率的关键一步 在生成式AI迅猛发展的今天,我们正见证一个关键转折——大模型不再只是“回答问题的工具”,而是逐渐演变为能主动思考、规划并执行复杂任务的智能体。传统聊天机器人依赖用户逐条输入指令&#x…

张小明 2026/1/7 3:22:07 网站建设

网站 验收新乡高端网站建设

终极FFmpeg Windows 32位版本完整配置指南 【免费下载链接】FFmpeg-Builds-Win32 项目地址: https://gitcode.com/gh_mirrors/ff/FFmpeg-Builds-Win32 FFmpeg-Builds-Win32项目为32位Windows系统用户提供了一套完整的音视频处理解决方案。这个开源项目通过自动化构建流…

张小明 2026/1/5 21:59:07 网站建设

网站图片相册代码百度爱采购推广怎么入驻

从零开始搭建ARM Cortex-M工程:Keil uVision实战全解析 你有没有过这样的经历? 手头拿到一块新的STM32开发板,兴冲冲打开Keil,点开“New Project”,结果在选择芯片时一脸懵——该选哪个型号?启动文件要不要…

张小明 2026/1/1 16:46:29 网站建设

网站托管服务 重庆工商注册号是什么

目录1. 认识信号2. 信号的产生方式2.1 通过键盘给终端发送信号2.1.1 信号都有哪些2.1.2 自定义信号捕捉singal()函数(证明ctrlc是2号信号编号)2.1.3 前台进程(目标进程)&后台进程2.1.补:前后台相关命令2.1.4 给进程发送信号2.2 系统调用发…

张小明 2026/1/2 2:37:21 网站建设

网站模板的制作怎么做的admin手机登录账号

Harmony开发之跨设备调用——远程启动Ability 引入:打破设备边界的应用能力 在传统的移动应用开发中,每个应用都运行在独立的设备上,设备间的应用能力无法共享。而HarmonyOS的跨设备调用能力,让应用可以像调用本地Ability一样&…

张小明 2026/1/2 1:03:53 网站建设

手机免费建站app怎样创建网站的代码

LyricsX:macOS桌面歌词的完美解决方案 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款专为macOS用户设计的智能桌面歌词显示工具,能…

张小明 2026/1/1 15:19:05 网站建设