From b3c22fd59742d27d4b2acacfb0ca92cf08c4927e Mon Sep 17 00:00:00 2001 From: Muse Date: Sun, 15 Nov 2026 09:03:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(s3):=20=E8=87=AA=E5=AE=9A=E4=B9=89=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E5=9F=9F=E5=90=8D=E5=9B=9E=E5=A1=AB=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E8=A1=A5=E4=B8=8A=E5=AD=98=E5=82=A8=E6=A1=B6=E4=B8=80=E6=AE=B5?= =?UTF-8?q?=EF=BC=88=E5=9F=9F=E5=90=8D/=E6=A1=B6/=E5=89=8D=E7=BC=80/?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MinIO 等自建服务 API 地址与访问地址分离,访问域名指向服务根, 原实现按 域名/前缀/文件名 拼、漏了桶名,文档里的地址会 404。 改为 域名/bucket/key;设置弹窗说明同步写清拼接规则,docs/30 补记。 同份 s3.rs 在独立 crate 对模拟 S3 复测通过(期望值已更新)。 --- docs/30-S3图片上传.md | 7 ++++++- src-tauri/src/s3.rs | 13 ++++++++++--- src/components/S3SettingsModal.tsx | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/30-S3图片上传.md b/docs/30-S3图片上传.md index 4cf1b13..b1a6a65 100644 --- a/docs/30-S3图片上传.md +++ b/docs/30-S3图片上传.md @@ -14,7 +14,12 @@ `https://{bucket}.s3.{region}.amazonaws.com/{key}`;填了自定义 Endpoint(MinIO / R2 / OSS 等 S3 兼容服务)走路径风格 `{endpoint}/{bucket}/{key}`。对象键 = 前缀 + 原文件名(同名覆盖, - 重复上传幂等)。配了「自定义访问域名」时回填文档的是该域名拼的地址。 + 重复上传幂等)。配了「自定义访问域名」时,回填文档的地址按 + 「域名/存储桶/前缀/文件名」拼——MinIO 等自建服务里 API 地址与对外 + 访问地址是两个域名、访问域名通常指向服务根,桶名必须出现在路径里 + (2026-11-15 用户指正,原实现漏了桶名一段)。不填访问域名时回填的 + 就是上传请求本身的地址(路径风格已含桶名、AWS 虚拟主机风格桶名在 + 域名里)。 - **配置存储**:进 UiState.s3(本机偏好库 SQLite/localStorage),字段 endpoint/region/bucket/accessKey/secretKey/prefix/publicBase/autoUpload; 加载时与默认值深合并。设置弹窗在 文件 → S3 上传设置…,带「测试连接」。 diff --git a/src-tauri/src/s3.rs b/src-tauri/src/s3.rs index 55689c5..423bd14 100644 --- a/src-tauri/src/s3.rs +++ b/src-tauri/src/s3.rs @@ -24,8 +24,9 @@ pub struct S3Config { /// 对象键前缀(可空),如 notes/ #[serde(default)] pub prefix: String, - /// 自定义访问域名(可空),如 https://cdn.example.com;填了则回填文档的 - /// 是这个域名下的地址,否则用上传请求本身的地址 + /// 自定义访问域名(可空),如 https://files.example.com;填了则回填文档的 + /// 地址按「域名/存储桶/对象键」拼(API 地址与访问地址分离的部署,如 + /// MinIO,访问域名指向服务根、桶名在路径里);不填则用上传请求本身的地址 #[serde(default)] pub public_base: String, } @@ -180,7 +181,13 @@ pub fn upload(cfg: &S3Config, file_path: &str, file_name: &str) -> Result