一、立项背景与目标
日常办公中,用户常需处理压缩PDF、图片合并、格式转换、批量重命名等文件任务。现有工具存在痛点:专业软件体积庞大,在线工具有隐私风险,命令行工具门槛过高,轻量工具又缺乏批量处理能力。
file flow 是一款本地优先的桌面文件处理工具,面向不想写脚本、不想碰终端的用户。核心目标:隐私安全(所有处理本地完成,不上传原始文件)、轻量高效(Tauri 2 架构,小体积低占用)、先预览后执行(降低误操作风险)、跨平台覆盖(Windows/macOS/Linux)。
二、软件功能与核心模块
首发版本聚焦四大模块:
1. PDF 工具:提供 PDF 压缩和图片转 PDF 功能。压缩通过 PDFium 库实现,支持选择压缩级别;图片转 PDF 支持批量导入并按顺序合并为单个文件,适用于扫描件整理、证件归档等场景。
2. 图片批处理:基于 libvips 库,支持格式转换(PNG/JPG/WebP 互转)、缩放(按比例或指定尺寸)和压缩(控制质量参数)。批量导入后统一设置参数一键执行。
3. 文件批量重命名:支持按规则批量重命名,提供实时预览。执行前可查看新旧文件名对照,系统内置冲突检测,文件名冲突时自动阻断并提示。
4. 设置与任务管理:配置输出规则(目录、命名策略),查看历史任务摘要,任务完成后自动记录便于回溯。
三、业务流程与功能路径
技术架构采用前后端分离:前端 React 19 + TypeScript + Vite 负责界面交互,后端 Rust + Tauri 2 负责文件处理核心逻辑。前后端通过 Tauri invoke 机制通信,命令统一经由 src/lib/tauri.ts 桥接层调用。本地数据用 SQLite 持久化。
典型操作流程:
1. 启动应用:首页展示功能入口和最近任务。 2. 选择模块:进入对应工作区(PDF/图片/重命名)。 3. 导入文件:通过对话框或系统拖拽导入文件。 4. 配置参数:设置处理参数(压缩级别、输出格式、重命名规则等)。 5. 预览结果:重命名展示新旧名称对照,其他模块显示配置摘要。 6. 执行处理:确认后点击执行,过程显示进度。 7. 查看结果:完成后展示摘要,可打开输出目录。
状态管理采用单页路由,各模块为独立页面。会话状态保存在内存中,模块切换时恢复之前的文件列表和配置。处理过程中锁定文件列表和配置项防止误操作。SQLite 存储用户设置和任务历史,位于应用本地数据目录。
一、整体架构与设计思路
项目采用 Tauri 2 + React 19 + TypeScript + Rust 混合架构。前端 React + Vite 负责界面,后端 Rust 实现文件处理,通过 invoke 机制通信,SQLite 持久化。
设计原则:本地优先、前后端分离、模块化、性能导向(安装包 ≤100MB,冷启动 ≤5s)。
技术栈:PDF 模块用 pdfium-render 绑定 PDFium;图片模块用 rs-vips 绑定 libvips;重命名模块纯 Rust 实现;前端 React 19 单页应用,IBM Plex 字体。
二、负责模块与量化成果
独立开发者,负责全部工作:
基础层:数据契约定义、SQLite 持久化、Tauri 桥接层、壳层组件。
PDF 模块:压缩和图片转 PDF,约 2500 行 Rust 代码。
图片模块:格式转换、缩放、压缩,流式处理避免溢出。
重命名模块:规则引擎、实时预览、冲突检测。
打包验证:三平台打包(.exe/.dmg/.deb),实现卸载清理和安装后刷新,通过性能门禁和冒烟测试。
扩展功能:设置页面优化、反馈面板、源水印(WM1-WM6 六个子任务)。
三、难点与解决方案
跨平台打包:三平台生命周期不同,Linux 支持 postinst 钩子,macOS 无对等钩子。各平台独立打包脚本,macOS 提供命令行清理。
Linux 内存门禁:全局 ≤50MB 目标不合理,改为平台感知 PSS 基线,针对 Debian 12 单独评估。
原生库绑定:PDFium 需打包各平台动态库,libvips 需系统预装。编写环境检查文档,测试增加可用性检测,缺失时优雅跳过。
数据契约同步:约定 serde rename_all 注解,跨边界变更必须同时修改 TS 接口和 Rust 结构体两处。