feat(s3): base64 内嵌图片纳入未上传检测与上传(用户指正)
初版把 data: 一律排除在「未上传」外——未落盘文档粘贴的图、导入 文档自带的图都是 data:image/...;base64 形态,批量/右键/状态栏全 检测不到。现 isUploadableImageSrc = 本地文件引用 ∪ base64 内嵌图: base64 图走新命令 s3_upload_base64(总数 31 对账),前端剥前缀传 纯 base64、Rust 解码后与文件图共用同一条 PUT 通路;对象名按内容 哈希(FNV-1a)生成,同图同名幂等。未落盘文档粘贴图也挂上自动上传。 进度/报错展示名对 base64 图用其哈希名,不再漏出 base64 串。 验证:独立 crate 对模拟 S3 实测 base64 解码 PUT;vitest 136+2、构建通过。
This commit is contained in:
@@ -24,8 +24,14 @@
|
||||
endpoint/region/bucket/accessKey/secretKey/prefix/publicBase/autoUpload;
|
||||
加载时与默认值深合并。设置弹窗在 文件 → S3 上传设置…,带「测试连接」。
|
||||
弹窗里已明示:密钥只保存在本机设置里,不写进文档、不会被 Git 同步带走。
|
||||
- **「未上传」判定**:图片 src 不是 http(s)/data/blob 即本地引用
|
||||
(`isLocalImageSrc`)。上传成功后把编辑器里所有同 src 的图片节点
|
||||
- **「未上传」判定**:本地文件引用(相对路径)或内嵌 base64 图片
|
||||
(`data:image/...;base64,...`)都算未上传(`isUploadableImageSrc`);
|
||||
http(s)/blob 不算。base64 形态来自未落盘文档的粘贴图与导入文档自带
|
||||
图(2026-11-15 用户指正:初版把 data: 一律排除、检测不到)。base64
|
||||
图没有文件可读,走单独的 `s3_upload_base64` 命令(命令总数 31):
|
||||
前端剥前缀传纯 base64,Rust 解码后与文件图共用同一条 PUT 通路;
|
||||
对象名按内容哈希生成(image-<FNV-1a>.<扩展名>),同图同名幂等。
|
||||
上传成功后把编辑器里所有同 src 的图片节点
|
||||
一次事务换成 S3 地址(`replaceImageSrc`,同图多处引用一并换),文档
|
||||
随之变脏、走既有自动保存落盘。本地 .assets 文件保留不删(删了断掉
|
||||
离线打开时的图,且用户可能还要本地备份)。
|
||||
@@ -51,6 +57,9 @@
|
||||
20150830T123600Z)——算出的 Signature 与官方值
|
||||
`5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7`
|
||||
逐字一致;UTC 时间换算(Hinnant civil 算法)与空负载哈希一并断言。
|
||||
- **base64 通路**:同一独立 crate 里实测 upload_base64:解码后的字节
|
||||
与原文一致地 PUT 到模拟 S3、Content-Type 按扩展名、非法 base64 在
|
||||
发请求前就报错。
|
||||
- **协议端到端**:把随产品发货的同一份 s3.rs 放进独立 crate,对本地
|
||||
TCP 模拟 S3 跑真实请求:PUT 路径风格、中文文件名百分号编码、
|
||||
x-amz-content-sha256 与请求体哈希一致、Authorization 头结构、
|
||||
|
||||
Reference in New Issue
Block a user