随手记图片附件与备份
0.6.0 对照 Electron 的 QuickNoteTool.tsx、quickNoteAttachments.ts 及测试、quickNoteVaultRepository.ts 实现。图片入口位于保存按钮之后、快速替换之前;使用 macOS 选图面板、剪贴板、原生文本拖放及图片缩放弹窗。
插入与预览
- 支持选择 PNG、JPEG、GIF、BMP、WebP 文件;剪贴板 TIFF 转换为 PNG。图片按实际内容识别和校验,不只检查扩展名。
- 图片按钮一次选择一张;拖入多图保持顺序,一批最多 20 张。连续粘贴排队插入;图片剪贴板一次使用第一张,普通文本粘贴仍由原生文本编辑器处理。混合文件拖放仅接受支持的图片。
- 图片替换当前选区;不在行边界时补齐前后换行,插入后光标位于引用末尾。选择范围使用 UTF-16,与 Electron 一致。插图自动切换文档语法为 Markdown。预览模式下通过图片按钮插入时追加到文末。
- 图片正文通过原生编辑器写入,可撤销/重做。文档切换、恢复、取消或读取期间正文改变时,不会把旧图片插入结果覆盖到新内容。需要先保存或新建笔记,才能插入附件。
- 分栏和预览显示段落中的本地 Markdown 图片,按可用宽度缩放,长图可滚动查看。点击打开图片弹窗,支持 25%–300% 缩放;预览图最长边最多 4096 像素,同一 Markdown 最多预览 1024 处图片引用;原始文件完整保留。
- 分栏默认左右各半,拖动分隔条可调整比例,双击恢复各半;在当前笔记工作区切换编辑/预览后保留比例和同一编辑器。长附件路径不会撑宽分栏。分隔比例暂不跨重启保存。
- 图片缺失、损坏或未登记时显示占位说明,保留正文中的引用。仅读取本原生工作区的已登记附件,不自动读取任意本机文件或下载远端图片。
独立存储与副本
图片位于原生版数据目录的 attachments/ 中。文件名使用图片内容的 SHA-256 与规范化扩展名,正文写入  等相对引用。文件与记录均按内容校验;同一图片重复插入复用文件,不产生重复图片副本。
workspace.json 保存附件记录,正常自动保存不重复编码图片字节。目录使用 0700,附件文件使用 0600。只接受本产品的附件路径和普通文件,拒绝路径穿越及附件目录/文件符号链接。
重命名、移动、复制文档保留稳定图片引用。删除原文档不会损坏副本;删除引用或撤销插图时也不立即删除图片,以保留重做能力。旧附件文件暂不自动清理;恢复旧备份同样保留原目录内已有文件。读取或写入中止后可能留下尚未登记的文件,这些文件不会被预览或导出备份。
原生版不共享 Electron 的附件目录、文件元数据、Git 仓库、用户数据或安装标识。所有图片导入都是复制,编辑笔记不会改写来源图片。
导出与备份恢复
“更多”和文档右键菜单增加 导出文档及附件…:选择目标位置后创建新文件夹,包含 .md 正文和被引用的 attachments/ 文件,可整体移动或分享。已有同名文件夹增加数字后缀;源文件和已有导出不会被覆盖。图片引用缺失时整次导出失败,不留下部分导出文件夹。代码块、行内代码和转义后的图片示例不作为实际附件引用。普通文本导出仍只导出正文。
设置中的 导出备份 将工作区及全部已登记附件的字节打包在一个原生版 JSON 备份里。可将备份导入另一台机器或另一份原生测试目录,无需原始图片文件。导入备份 确认后,先保存当前工作区与附件副本,再校验待恢复的图片内容、大小、摘要和记录;全部通过后才安装图片并原子替换工作区文件。错误备份不会覆盖现有工作区。
0.1.0–0.5.0 不含附件的工作区与备份可直接读取和恢复。带附件记录但没有图片字节的 workspace.json 不是完整便携备份,导入时会明确拒绝;应使用“导出备份”。如果已登记图片在磁盘上丢失或损坏,完整备份会报错,不静默忽略图片。
限制与尚未对齐部分
- 单张图片最多 20 MB、4000 万像素,单边最多 2 万像素;一次最多 20 张,等待队列最多 20 批。
- 工作区最多登记 1024 张、合计 64 MB 附件。该限制不等于磁盘占用上限,旧文件及恢复前副本暂不自动清理。
- 普通工作区 JSON 上限 64 MB,携带图片的便携备份上限 192 MB。
- GIF/WebP 原文件保留,原生预览只显示首帧;不提供动画播放或图片编辑。
- 尚未支持远端图片、HTML 图片、全部复杂列表/表格/嵌套块中的图片布局。图片目录不随普通文本文件批量导入;跨机器恢复使用完整备份。
- Electron 会尝试清理失去引用的图片;原生版保留文件,优先保证撤销、重做及文档副本。附件管理与手动清理界面仍待补齐。
- 正文镜像到
quick-notes/后支持 FSEvents 监听、Finder 定位与文档库 Git 面板(与 parity.md 随手记条目一致);仍不含 Electron 风格附件路径与磁盘双向同步。
验证
核心用例检查选区/换行、图片有效性、路径/符号链接、内容校验、私有权限、旧数据兼容、跨目录备份恢复、失败时工作区不变、复制后删除原文档、完整导出与同名保护。
原生验收打开并取消真实选图面板,使用独立测试剪贴板调用原生粘贴处理,检查连续图片插入、文件批量插入、撤销/重做、过期文档保护、图片与缩放弹窗、缺失占位及实际恢复。应用窗口内的鼠标事件验证分隔条拖动与切换视图后的比例恢复;另外检查分栏实际宽度及图片水平边界。文件拖放的插入回调已覆盖;不将回调测试等同于完整 Finder 拖动手势验收。所有验收使用临时工作区,不读取或修改用户的真实笔记和剪贴板。