fix(storage): presigned URL 改用对外可达 host,修复客户端直传断链
SeaweedFS 换存储后 MINIO_ENDPOINT 变为 seaweedfs:8333(容器名), PhotoService 生成的 presigned URL 把该 host 直接下发给客户端, 客户端不在 docker 网络内无法解析 → 直传/直链全断。 - S3Config:新增 amazonS3Signer Bean,指向 object-storage.public-endpoint (缺省回退内网 endpoint,向后兼容)。独立签名端是因为 SigV4 签名覆盖 host 头,事后改 URL 字符串会让签名失效返 403;独立客户端让签名 host 与客户端实际命中的 host 天然一致。 - PhotoService:去掉 @RequiredArgsConstructor,改显式 @Qualifier 构造器; getUploadToken / getSignedUrl / getSignedUrlForAuthorizedReview 三处 presigned 生成改用 amazonS3Signer;putObject 服务端上传仍走内网 amazonS3。 - application-docker.yml / application-dev.yml:public-endpoint 读 MINIO_PUBLIC_ENDPOINT(缺省回退 MINIO_ENDPOINT)。 - 三套 compose:注入 MINIO_PUBLIC_ENDPOINT (dev localhost:8333 / staging localhost:8334 / prod 留作单一旋钮)。 - 测试:PhotoServiceTest 新增嵌套 PresignedUrlPublicHostTest,用真实 AmazonS3 客户端(仅本地签名不联网)断言下发 URL host 为对外地址、 不含 seaweedfs 容器名;同步补齐两处 5→6 参构造调用。 验证:本机 65 E2E 全绿 + storage_link_probe path-style 全通 + PhotoServiceTest/PhotoUploadValidationTest/PhotoLimitGuardTest 19 例单测全绿。 顺带:backend/maven-settings.xml 的 Central 兜底由投毒的 repo1.maven.org 改为可达的 repo.maven.apache.org,使本机镜像构建可走 aliyun 主源。
This commit is contained in:
@@ -108,6 +108,8 @@ services:
|
||||
REDIS_PORT: 6379
|
||||
REDIS_PASSWORD: staging-redis-pass-change-me
|
||||
MINIO_ENDPOINT: http://seaweedfs:8333
|
||||
# 客户端直传 presigned URL 用:staging S3 网关 publish 到宿主 8334。
|
||||
MINIO_PUBLIC_ENDPOINT: http://localhost:8334
|
||||
MINIO_ACCESS_KEY: staging
|
||||
MINIO_SECRET_KEY: staging_dev_password
|
||||
JWT_ACCESS_SECRET: staging-access-secret-dev-only
|
||||
|
||||
Reference in New Issue
Block a user