!1588 修复阿里云 OSS 和七牛云前端直传签名地址生成问题

Merge pull request !1588 from 司徒俊杰/master-jdk17
This commit is contained in:
芋道源码
2026-08-30 06:51:57 +00:00
committed by Gitee
2 changed files with 42 additions and 0 deletions
@@ -173,6 +173,12 @@ public class S3FileClient extends AbstractFileClient<S3FileClientConfig> {
* @return 节点地址
*/
private String buildPresignerEndpoint() {
// 阿里云 OSS、七牛云的自定义域名仅用于文件访问,不能作为 S3 签名节点。
// Presigner 必须使用服务商提供的 endpoint,否则生成的签名无法用于直传。
if (StrUtil.contains(config.getEndpoint(), S3FileClientConfig.ENDPOINT_ALIYUN)
|| StrUtil.contains(config.getEndpoint(), S3FileClientConfig.ENDPOINT_QINIU)) {
return buildEndpoint();
}
// 补全 domain
if (StrUtil.isEmpty(config.getDomain())) {
config.setDomain(buildDomain());
@@ -69,6 +69,42 @@ public class S3FileClientTest {
assertFalse(result.contains("%25E4%25B8%25AD"));
}
@Test
public void testPresignPutUrl_aliyunUsesEndpointInsteadOfCustomDomain() {
S3FileClientConfig config = new S3FileClientConfig();
config.setAccessKey("access-key");
config.setAccessSecret("access-secret");
config.setBucket("test-bucket");
config.setDomain("https://custom.example.com");
config.setEndpoint("oss-cn-beijing.aliyuncs.com");
config.setEnablePathStyleAccess(false);
config.setEnablePublicAccess(false);
S3FileClient client = new S3FileClient(0L, config);
client.init();
String result = client.presignPutUrl("avatar.jpg");
assertTrue(result.startsWith("https://test-bucket.oss-cn-beijing.aliyuncs.com/"));
}
@Test
public void testPresignPutUrl_qiniuUsesEndpointInsteadOfCustomDomain() {
S3FileClientConfig config = new S3FileClientConfig();
config.setAccessKey("access-key");
config.setAccessSecret("access-secret");
config.setBucket("test-bucket");
config.setDomain("https://custom.example.com");
config.setEndpoint("s3-cn-south-1.qiniucs.com");
config.setEnablePathStyleAccess(false);
config.setEnablePublicAccess(false);
S3FileClient client = new S3FileClient(0L, config);
client.init();
String result = client.presignPutUrl("avatar.jpg");
assertTrue(result.startsWith("https://test-bucket.s3-cn-south-1.qiniucs.com/"));
}
@Test
@Disabled // MinIO,如果要集成测试,可以注释本行
public void testMinIO() throws Exception {