RexUniNLU零样本NLU入门教程:schema定义驱动,无需标注数据即可泛化推理
2026/3/25 18:51:47
专业开发日记:WebUploader大文件传输系统(信创兼容版)
日期:2023年11月15日 星期三 郑州 晴
今日接到客户紧急需求:开发一套支持20G大文件传输的Web系统,需兼容IE8及信创浏览器(龙芯、红莲花、奇安信),支持文件夹层级结构上传/下载,并满足国产化环境要求(统信UOS/中标麒麟/银河麒麟+达梦/人大金仓数据库)。客户强调需免费开源、7×24小时支持,且现有开源方案(如WebUploader默认实现)存在文件夹上传缺陷。
runtimeOrder配置优先使用flash兼容旧系统<%@ page contentType="text/html;charset=UTF-8" %> 信创大文件传输系统 选择文件/文件夹 开始上传 var uploader = WebUploader.create({ swf: '/webuploader/Uploader.swf', server: '/upload?action=chunk', pick: { id: '#filePicker', directory: true // 启用文件夹上传 }, formData: { encryptType: 'SM4' // 默认使用SM4加密 }, chunked: true, chunkSize: 5 * 1024 * 1024, // 5MB分片 threads: 3, runtimeOrder: 'flash', // 强制Flash兼容IE8 compress: false }); // 文件夹结构处理 uploader.on('filesQueued', function(files) { files.forEach(file => { if (file.isDir) { // 递归读取文件夹(需配合Flash文件系统API) console.log('检测到文件夹:', file.name); } }); }); // 上传前加密(示例:SM4 ECB模式) uploader.on('uploadBeforeSend', function(block, data) { var key = '1234567890abcdef'; // 实际应从服务端获取 var ciphertext = SM4.encrypt(block.chunk, key); data.ciphertext = ciphertext; });// UploadServlet.java (Servlet 3.0+)@WebServlet("/upload")@MultipartConfigpublicclassUploadServletextendsHttpServlet{protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringaction=request.getParameter("action");StringencryptType=request.getParameter("encryptType");if("chunk".equals(action)){// 处理分片上传PartfilePart=request.getPart("file");StringchunkIndex=request.getParameter("chunk");StringfileName=request.getParameter("name");// 解密逻辑(示例:AES)if("AES".equals(encryptType)){Stringciphertext=request.getParameter("ciphertext");// byte[] decrypted = AESUtil.decrypt(ciphertext, KEY);// 实际需将解密数据写入临时文件}// 保存分片到临时目录StringtempPath="/tmp/uploads/"+fileName+"_"+chunkIndex;try(InputStreamin=filePart.getInputStream();FileOutputStreamout=newFileOutputStream(tempPath)){byte[]buffer=newbyte[1024];intbytesRead;while((bytesRead=in.read(buffer))!=-1){out.write(buffer,0,bytesRead);}}response.getWriter().write("{\"status\":1}");}}}// 前端生成文件夹结构JSONfunctiongenerateFolderMeta(fileEntry){varmeta={name:fileEntry.name,isDir:fileEntry.isDir,children:[]};if(meta.isDir){// 递归读取子文件(需Flash支持)// var reader = fileEntry.createReader();// reader.readEntries(function(entries) {// entries.forEach(entry => {// meta.children.push(generateFolderMeta(entry));// });// });}returnmeta;}// 后端合并分片时重建目录结构// 需在所有分片上传完成后调用合并接口浏览器兼容:
webuploader.flashonly.js强制使用Flash运行时操作系统适配:
数据库适配:
// 达梦数据库连接示例publicclassDMDataSource{publicstaticConnectiongetConnection()throwsSQLException{DriverManager.registerDriver(newdm.jdbc.driver.DmDriver());returnDriverManager.getConnection("jdbc:dm://localhost:5236/DAMENG","SYSDBA","SYSDBA");}}文件夹上传缺陷:
加密性能优化:
断点续传实现:
寻求帮助:
诚邀熟悉WebUploader源码、信创环境开发的大神加入QQ群:374992201,提供以下支持:
明日计划:
(签名:郑州某高校大三学生 张工)
导入到Eclipse:点击查看教程
导入到IDEA:点击查看教程
springboot统一配置:点击查看教程
NOSQL示例不需要任何配置,可以直接访问测试
选择对应的数据表脚本,这里以SQL为例
up6/upload/年/月/日/guid/filename
支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传
支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。
点击下载完整示例