本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源。使用Java SDK发起OSS请求,您需要初始化一个OSSClient实例,并根据需要修改ClientConfiguration的默认配置项。
注意事项
初始化OSSClient前,您需要配置访问凭证,本文以从环境变量读取访问凭证为例,详情请参见配置访问凭证。
如果您希望获取关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。
如果您希望创建RAM用户的AccessKey,请参见创建AccessKey。
请使用OSS Java SDK 3.17.4及以上版本以支持V4签名,详情请参见安装SDK。
前置条件
在配置客户端前,您需要先使用RAM用户AccessKey完成配置环境变量。
Linux
在命令行界面执行以下命令来将环境变量设置追加到
~/.bashrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
执行以下命令使变更生效。
source ~/.bashrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
在终端中执行以下命令,查看默认Shell类型。
echo $SHELL
根据默认Shell类型进行操作。
Zsh
执行以下命令来将环境变量设置追加到
~/.zshrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
执行以下命令使变更生效。
source ~/.zshrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
执行以下命令来将环境变量设置追加到
~/.bash_profile
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
执行以下命令使变更生效。
source ~/.bash_profile
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
在CMD中运行以下命令。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
运行以下命令,检查环境变量是否生效。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
在PowerShell中运行以下命令。
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
运行以下命令,检查环境变量是否生效。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
默认配置示例
以下代码示例演示了如何使用V4签名和V1签名配置OSSClient。请注意,以下代码示例默认使用外网bucket默认域名以及RAM用户的AK信息。
V1签名(不推荐)
常见场景配置示例
如果您有配置其它域名的需求,请参考以下代码示例。请注意,以下代码示例默认使用V4签名以及RAM用户的AK信息。
内网域名配置示例
当您的应用部署在阿里云的ECS实例上,并且需要频繁访问同地域的OSS资源时,使用内网域名可以降低流量成本并提高访问速度。
以下是使用OSS内网域名配置OSSClient的示例代码。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class OSSClientV4 {
public static void main(String[] args) throws Exception {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou-internal.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
// 填写Endpoint对应的Region信息,例如cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 显式声明使用 V4 签名算法
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
// 关闭OSSClient。
ossClient.shutdown();
}
}
自定义域名配置示例
当您有多个不同的OSS bucket用于不同的目的时,可以通过为每个bucket设置不同的子域名来更好地管理和组织资源。
以下是使用自定义域名配置OSSClient的示例代码。
您需要先将自定义域名绑定至Bucket默认域名,否则将引发报错!关于绑定自定义域名的详细操作,请参见绑定自定义域名至Bucket默认域名。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class OSSClientV4 {
public static void main(String[] args) throws Exception {
// yourEndpoint请填写您的自定义域名。例如https://static.example.com。
String endpoint = "yourEndpoint";
// Endpoint请填写您对应的Region信息,例如cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 请注意,设置true开启CNAME选项。
clientBuilderConfiguration.setSupportCname(true);
// 显式声明使用 V4 签名算法
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
// 关闭OSSClient。
ossClient.shutdown();
}
}
专有域配置示例
以下是使用专有域配置OSSClient的示例代码。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class OSSClientV4 {
public static void main(String[] args) throws Exception {
// yourEndpoint请填写您的专有域。例如:https://service.corp.example.com
String endpoint = "yourEndpoint";
// 填写Endpoint对应的Region信息,例如cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 显式声明使用 V4 签名算法
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
// 关闭OSSClient。
ossClient.shutdown();
}
}
IP地址配置示例
以下是使用IP地址配置OSSClient的示例代码。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class OSSClientV4 {
public static void main(String[] args) throws Exception {
// 您可以根据需要将IP地址作为Endpoint使用,请根据实际IP地址填写。
String endpoint = "https://10.10.10.10";
// 填写Endpoint对应的Region信息,例如cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 开启二级域名访问OSS,默认不开启。OSS Java SDK 2.1.2及之前的版本需要设置此值,OSS Java SDK 2.1.2及之后的版本会自动检测到IP地址,不需要再设置此值。
clientBuilderConfiguration.setSLDEnabled(true);
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
// 关闭OSSClient。
ossClient.shutdown();
}
}
代理服务器配置示例
如果您有配置客户端代理服务器的需求,请参考以下代码示例。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
public static void main(String[] args) throws Exception {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 创建ClientBuilderConfiguration。
// ClientBuilderConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java。
conf.setUserAgent("aliyun-sdk-java");
// 设置代理服务器IP,请将"<yourProxyHost>"替换为代理服务器的IP地址(如"196.128.xxx.xxx")。
conf.setProxyHost("<yourProxyHost>");
// 设置代理服务器验证的用户名,请将"<yourProxyUserName>"替换为代理服务器的用户名(如"root")。
conf.setProxyUsername("<yourProxyUserName>");
// 设置代理服务器验证的密码,请将"<yourProxyPassword>"替换为该用户的验证密码。
conf.setProxyPassword("<yourProxyPassword>");
// 创建OSSClient实例。
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(conf)
.region(region)
.build();
// 关闭OSSClient。
ossClient.shutdown();
}
}
访问超时配置示例
如果您有配置客户端访问超时的需求,请参考以下代码示例。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
public static void main(String[] args) throws Exception {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 创建ClientBuilderConfiguration。
// ClientBuilderConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// 设置允许打开的最大HTTP连接数。不设置时默认为1024。
conf.setMaxConnections(1024);
// 设置Socket层传输数据的超时时间(单位:毫秒)。不设置时默认为50000毫秒。
conf.setSocketTimeout(50000);
// 设置建立连接的超时时间(单位:毫秒)。不设置时默认为50000毫秒。
conf.setConnectionTimeout(50000);
// 设置从连接池中获取连接的超时时间(单位:毫秒)。不设置时默认无超时限制。
conf.setConnectionRequestTimeout(60*60*24*1000);
// 设置连接空闲超时时间,超时则关闭连接(单位:毫秒)。不设置时默认为60000毫秒。
conf.setIdleConnectionTime(60000);
// 创建OSSClient实例。
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(conf)
.region(region)
.build();
// 关闭OSSClient。
ossClient.shutdown();
}
}
OSSClient的配置方法汇总
ClientConfiguration类是OSSClient的配置类,您可以通过此类来配置OSSClient的代理、连接超时、最大连接数等参数。
方法 | 描述 |
ClientConfiguration.setMaxConnections | 设置允许打开的最大HTTP连接数。默认为1024。 |
ClientConfiguration.setSocketTimeout | 设置Socket层传输数据的超时时间(单位:毫秒)。默认为50000毫秒。 |
ClientConfiguration.setConnectionTimeout | 设置建立连接的超时时间(单位:毫秒)。默认为50000毫秒。 |
ClientConfiguration.setConnectionRequestTimeout | 设置从连接池中获取连接的超时时间(单位:毫秒)。默认不超时。 |
ClientConfiguration.setIdleConnectionTime | 设置连接空闲超时时间,超时则关闭连接(单位:毫秒)。默认为60000毫秒。 说明 关于超时时间设置的更多信息,请参见阿里云OSS Java SDK超时时间设置。 |
ClientConfiguration.setSupportCname | 是否支持CNAME作为Endpoint,默认支持CNAME。 |
ClientConfiguration.setSLDEnabled | 是否开启二级域名(Second Level Domain)的访问方式,默认不开启。 |
ClientConfiguration.setProtocol | 连接OSS所采用的协议(HTTP或HTTPS),默认为HTTP。 |
ClientConfiguration.setUserAgent | 用户代理,指HTTP的User-Agent头。默认为 |
ClientConfiguration.setProxyHost | 代理服务器主机地址。 |
ClientConfiguration.setProxyPort | 代理服务器端口。 |
ClientConfiguration.setProxyUsername | 代理服务器验证的用户名。 |
ClientConfiguration.setProxyPassword | 代理服务器验证的密码。 |
ClientConfiguration.setRedirectEnable | 是否开启HTTP重定向。 说明 Java SDK 3.10.1及以上版本支持设置是否开启HTTP重定向,默认开启。 |
ClientConfiguration.setVerifySSLEnable | 是否开启SSL证书校验。 说明 Java SDK 3.10.1及以上版本支持设置是否开启SSL证书校验,默认开启。 |
ClientConfiguration.setMaxErrorRetry | 请求失败后最大的重试次数。默认3次。 说明 当请求出现异常时,根据请求类型不同,OSS将采取不同的默认重试策略。
|
ClientConfiguration.setRetryStrategy() | 设置自定义重试策略,一般不建议设置。 |