Azure 存储 - Java 代码中的代理设置

问题描述 投票:0回答:2

在java服务中,我尝试上传azure存储目录中的文件;因此我写了这样的代码:

import com.azure.core.util.*;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

 //Create connexion string
String connectStr ="DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accountKey + ";EndpointSuffix=" + endpoint;
            
//ShareDirectoryClient
            
ShareDirectoryClient dirClient = new     ShareFileClientBuilder().connectionString(connectStr).shareName(shareName).resourcePath(directoryName).configuration(proxyOptions).buildDirectoryClient();
            
// Create empty file
dirClient.createFile(fileName, body.length());

HTTPS 请求必须通过代理服务器,因此,我收到此错误:

“无法运行‘sendFileInDirectoryProxyTest’ reactor.core.Exceptions$ReactiveException:io.netty.channel.AbstractChannel$AnnotatedConnectException:连接超时:没有更多信息:“

我无法设置/使用全局设置。 为了在 Java 代码中设置代理,我尝试了多种方法,例如使用配置类:

Configuration configuration = new Configuration();
configuration.put("java.net.useSystemProxies", "true");
configuration.put("https.proxyHost", "xxxxxxxxx");
configuration.put("https.proxyPort", "xxxx");
            
ShareDirectoryClient dirClient = new     ShareFileClientBuilder().connectionString(connectStr).shareName(shareName).resourcePath(directoryName).configuration(configuration).buildDirectoryClient();
            

但这并没有解决问题。 我确信这非常简单,任何帮助将不胜感激。 谢谢。查尔斯·德·圣安德烈。

java azure proxy storage
2个回答
0
投票

您需要配置ProxyOptions并在httpClientBuilder上设置它们。我们所有的存储客户端构建器都有一个接受客户端的 .httpClient() 方法,您可以使用具有 .proxyOptions() 方法的 NettyAsyncClientBuilder() 构建具有所有默认值 + 代理选项的客户端。请尝试一下,如果您还有其他问题,请告诉我。 示例: azure-sdk-for-java/sdk/storage/azure-storage-blob at main · Azure/azure-sdk-for-java (github.com)


0
投票

ProxyOptions() 不适用于 HTTPS 代理服务器。

ProxyOptions proxyOptions = ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration());

        // Build the HttpClient with the proxy options if available
        HttpClient httpClient = new NettyAsyncHttpClientBuilder().proxy(proxyOptions).build();
        ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder().clientId(clientid)
                .clientSecret(clientsecretvalue).tenantId(tenantid).proxyOptions(proxyOptions).build();
        return clientSecretCredential;
© www.soinside.com 2019 - 2024. All rights reserved.