Lychee-rerank-mm与Docker集成:容器化部署最佳实践
2026/4/6 10:35:57
兄弟,作为甘肃接外包的前端程序员,我太懂你现在的处境了——客户要20G大文件上传,还要文件夹层级保留、IE9兼容、加密传输,预算还卡得死死的。网上找的代码全是“文件上传半成品”,文件夹功能要么丢层级,要么IE9直接崩。别慌!我熬了半个月啃下的原生JS+Vue3全栈方案,今天把前端核心代码全盘托出(后端接口文档也给你备好了),保证你能直接集成到项目里,客户验收时直竖大拇指!
localStorage+后端数据库双存储进度,关浏览器/重启电脑不丢)。/父文件夹/子文件路径存储(IE9用“伪路径+元数据”方案兜底)。vue3、crypto-js(AES加密)、axios(HTTP请求),无额外商业库费用。Blob.js+es6-promise)直接打包进项目,客户无需额外配置。// ==================== 兼容性补丁(必须引入!) ==================== // 补Promise(IE9不支持) import 'es6-promise/auto'; // 补fetch(IE9不支持) import 'whatwg-fetch'; // 补Blob.slice(IE9不支持) import Blob from 'blob-polyfill'; // 补console(IE9可能没有) if (!window.console) window.console = { log: () => {}, error: () => {} }; // ==================== 依赖库(需手动安装) ==================== import CryptoJS from 'crypto-js'; // AES加密 import axios from 'axios'; // HTTP请求 import SparkMD5 from 'spark-md5'; // 文件哈希(可选,用于校验) export default { name: 'BigFileUploader', data() { return { uploadTasks: [], // 上传任务列表(核心数据) chunkSize: 10 * 1024 * 1024, // 分片大小10MB(20G文件分2000片) aesKey: '', // AES密钥(从后端动态获取) isUploading: false, // 全局上传状态(防止重复提交) uploadQueue: [] // 待上传任务队列(控制并发数) }; }, mounted() { this.initAesKey(); // 初始化AES密钥(首次加载时获取) this.loadResumeTasks(); // 启动时加载本地未完成任务 }, methods: { /** * 状态颜色样式(IE9兼容) * @param {string} status 状态值 * @returns {Object} 样式对象 */ statusColor(status) { const map = { pending: { color: '#909399' }, resuming: { color: '#E6A23C' }, uploading: { color: '#409EFF' }, paused: { color: '#F56C6C' }, failed: { color: '#F56C6C', fontWeight: 'bold' }, success: { color: '#67C23A' } }; return map[status] || {}; } } };GET /api/upload/get-aes-key{ "code": 200, "data": { "key": "your-32bytes-aes-key-123456" } }POST /api/upload/chunktaskId:任务ID(前端生成)chunkIndex:当前分片索引(从0开始)totalChunks:总分片数filePath:文件存储路径(如/upload_1620000000/folder_123/file.txt)chunk:加密后的分片内容(Blob){ "code": 200, "msg": "分片上传成功" }GET /api/download/filefilePath:文件存储路径(如/upload_1620000000/folder_123/file.txt)application/octet-stream)vue-cli 5.x),安装依赖:npminstallvue3 axios crypto-js blob-polyfill es6-promise whatwg-fetchblob-polyfill.js、es6-promise.js放在public目录,index.html中引入:vue.config.js中配置transpileDependencies,确保兼容IE9的语法。npm run build,将dist目录上传至Linux服务器(如/var/www/uploader)。mvn clean package,将jar文件上传至服务器(如/opt/uploader)。server { listen 80; server_name your-domain.com; # 前端静态资源 root /var/www/uploader/dist; index index.html; # 后端接口代理 location /api/ { proxy_pass http://localhost:8080/; # SpringBoot默认端口 } }java -jar uploader-1.0.0.jar。| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| IE9无法选择文件夹 | 未引入Blob.js补丁 | 检查public/index.html是否引入补丁 |
| 分片上传失败 | AES密钥不一致 | 检查前端initAesKey是否调用成功 |
| 进度丢失(重启浏览器) | localStorage被禁用 | 提示用户启用localStorage |
| 下载速度慢 | 服务器带宽不足 | 升级服务器带宽或使用CDN加速 |
axios的onUploadProgress控制分片上传速度(如每秒最多上传1MB)。兄弟,这套代码你拿过去,按照文档集成,保证客户的20G文件夹上传需求能满足!有问题直接甩日志到群里(QQ群:374992201),老炮儿我24小时在线帮你改。记住:不会就查文档,卡壳就问群友——咱前端程序员,接外包就是要“稳准狠”!
示例中已经包含此目录
接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表
参考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传
支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。
点击下载完整示例