fix(s3): 自定义访问域名回填地址补上存储桶一段(域名/桶/前缀/文件名)
MinIO 等自建服务 API 地址与访问地址分离,访问域名指向服务根, 原实现按 域名/前缀/文件名 拼、漏了桶名,文档里的地址会 404。 改为 域名/bucket/key;设置弹窗说明同步写清拼接规则,docs/30 补记。 同份 s3.rs 在独立 crate 对模拟 S3 复测通过(期望值已更新)。
This commit is contained in:
@@ -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<String
|
||||
if base.is_empty() {
|
||||
Ok(url)
|
||||
} else {
|
||||
Ok(format!("{base}{}", encode_uri_path(&format!("/{key}"))))
|
||||
// 自定义访问域名按「域名/存储桶/前缀/文件名」拼(docs/30):
|
||||
// MinIO 等自建服务的 API 地址与对外访问地址是两个域名,访问域名
|
||||
// 通常指向服务根,桶名必须出现在路径里,不能沿用虚拟主机风格的省略。
|
||||
Ok(format!(
|
||||
"{base}{}",
|
||||
encode_uri_path(&format!("/{bucket}/{key}", bucket = cfg.bucket.trim()))
|
||||
))
|
||||
}
|
||||
} else {
|
||||
let body = resp.text().unwrap_or_default();
|
||||
|
||||
Reference in New Issue
Block a user