You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java代码配置Azure Storage代理上传文件报连接超时问题

Java 为Azure File Storage客户端配置正向代理的正确方式

配置失效原因

此前往Configuration中写入https.proxyHost、java.net.useSystemProxies参数的方式不生效,核心原因是:

  • Azure Storage Java SDK v12+版本默认使用Netty异步HTTP客户端发送请求,不会主动读取存入com.azure.core.util.Configuration的JVM系统代理属性
  • java.net.useSystemProxies配置仅对JDK原生HttpURLConnection生效,对Netty客户端无作用

可直接运行的实现代码

默认引入azure-storage-file-share依赖时会传递依赖Netty HTTP客户端包,无需额外引入(手动排除过该依赖的场景看后面的适配说明),配置代码如下:

import com.azure.core.http.HttpClient;
import com.azure.core.http.ProxyOptions;
import com.azure.core.http.netty.NettyAsyncHttpClientBuilder;
import com.azure.storage.file.share.ShareDirectoryClient;
import com.azure.storage.file.share.ShareFileClientBuilder;
import java.net.InetSocketAddress;

public class AzureStorageUploadService {
    public void uploadFileToShare() {
        // 1. 构造代理参数
        ProxyOptions proxyOptions = new ProxyOptions(
                ProxyOptions.Type.HTTP,
                new InetSocketAddress("替换为代理主机IP/域名", 替换为实际代理端口)
        );
        // 代理开启身份认证时放开下面这行,无认证可直接跳过
        // proxyOptions.setCredentials("代理账号", "代理密码");

        // 2. 注入代理构造HTTP客户端实例
        HttpClient proxyHttpClient = new NettyAsyncHttpClientBuilder()
                .proxy(proxyOptions)
                .build();

        // 3. 构造存储目录客户端
        String connectStr = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accountKey + ";EndpointSuffix=" + endpoint;
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
                .connectionString(connectStr)
                .shareName(shareName)
                .resourcePath(directoryName)
                .httpClient(proxyHttpClient)
                .buildDirectoryClient();

        // 原有文件上传逻辑保持不变
        dirClient.createFile(fileName, body.length());
    }
}

特殊场景适配

  • 如果手动排除了Netty依赖,改用JDK原生HTTP客户端作为SDK的HTTP实现,只需要把NettyAsyncHttpClientBuilder替换为com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder即可,ProxyOptions的配置逻辑完全一致
  • 如果使用SOCKS5类型代理,将ProxyOptions.Type.HTTP替换为ProxyOptions.Type.SOCKS5即可
  • 不要通过ShareFileClientBuilder.configuration()方法传入代理相关配置,该方法仅用于加载SDK自身的配置项,不会把代理参数透传给底层HTTP客户端

内容的提问来源于stack exchange,提问作者Carlito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:36:16