开始使用 Azure Blob 存储和 Java
本文介绍如何使用适用于 Java 的 Azure Blob 存储客户端库连接到 Azure Blob 存储。 连接后,使用开发人员指南来了解如何针对 Blob 存储服务的容器、blob 和功能运行代码。
若要从完整示例开始,请参阅快速入门:适用于 Java 的 Azure Blob 存储客户端库。
API 参考 | 包 (Maven) | 库源代码 | 示例
- Azure 订阅 - 创建试用订阅。
- Azure 存储帐户 - 创建存储帐户
- Java 开发工具包 (JDK) 8 或更高版本
- 在本示例中,Apache Maven 用于项目管理
备注
本文使用 Maven 生成工具来生成和运行示例代码。 其他生成工具(例如 Gradle)也可与 Azure SDK for Java 一起使用。
使用 Maven 创建新的控制台应用,或打开现有项目。 按照以下步骤安装包并添加必要的 import
指令。
在文本编辑器中打开 pom.xml
文件。 通过包括 BOM 文件或包括直接依赖项来安装包。
添加 azure-sdk-bom,以在最新版本的库中采用一个依赖项。 在以下代码片段中,将 {bom_version_to_target}
占位符替换为版本号。 使用 azure-sdk-bom 则无需指定每个依赖项的版本。 若要了解有关 BOM 的详细信息,请参阅 Azure SDK BOM 自述文件。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
将以下依赖项元素添加到依赖项组。 与 Azure 服务建立无密码连接需要 azure-identity 依赖项。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-common</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
若要依赖特定版本的库,请将直接依赖项添加到项目中:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>{package_version_to_target}</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-common</artifactId>
<version>{package_version_to_target}</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>{package_version_to_target}</version>
</dependency>
然后,打开代码文件并添加必要的 import
指令。 在此示例中,在 App.java 文件中添加以下指令:
import com.azure.core.credential.*;
import com.azure.identity.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.specialized.*;
import com.azure.storage.common.*;
Blob 客户端库信息:
- com.azure.storage.blob:包含可用于对服务、容器和 Blob 执行操作的主要类(客户端对象)。
- com.azure.storage.blob.models:包含实用工具类、结构和枚举类型。
- com.azure.storage.blob.specialized:包含可用于执行特定于 Blob 类型(例如追加 Blob)的操作的类。
若要将应用连接到 Blob 存储,请创建 BlobServiceClient 类的实例。 还可以使用 BlobServiceAsyncClient 类进行异步编程。 此对象是在存储帐户级别与数据资源交互的起点。 可以将其用于对存储账户及其容器执行操作。 还可以使用服务客户端创建容器客户端或 blob 客户端,具体取决于需要使用的资源。
要详细了解如何创建和管理客户端对象,请参阅 创建和管理与数据资源交互的客户端对象。
你可以使用 Microsoft Entra 授权令牌、帐户访问密钥或共享访问签名 (SAS) 来为 BlobServiceClient
对象授权。 为了获得最佳安全性,Azure 建议尽可能使用具有托管标识的 Microsoft Entra ID 来授权针对 blob 数据的请求。 有关详细信息,请参阅使用 Microsoft Entra ID 授予对 blob 的访问权限。
使用存储帐户名称和帐户密钥创建 StorageSharedKeyCredential。 然后,使用该对象初始化 BlobServiceClient 对象。
public static BlobServiceClient GetBlobServiceClientAccountKey(String accountName, String accountKey) {
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.chinacloudapi.cn/")
.credential(credential)
.buildClient();
return blobServiceClient;
}
还可以使用连接字符串创建 BlobServiceClient
对象。
public static BlobServiceClient GetBlobServiceClientConnectionString(String connectionString) {
// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.chinacloudapi.cn/")
.connectionString(connectionString)
.buildClient();
return blobServiceClient;
}
有关如何获取帐户密钥的信息以及正确管理和保护密钥的最佳做法指导,请参阅管理存储帐户访问密钥。
重要
应谨慎使用帐户访问密钥。 如果帐户访问密钥丢失或意外放置在不安全的位置,服务可能会变得易受攻击。 具有访问密钥的任何人都可以授权针对存储帐户的请求,并且实际上有权访问所有数据。 DefaultAzureCredential
提供增强的安全功能和优势,是管理 Azure 服务授权的推荐方法。
Java 虚拟机 (JVM) 会将 DNS 名称查找成功后的响应缓存一段时间,这段时间称为“生存时间 (TTL)”。 许多 JVM 的默认 TTL 值为 -1
,这意味着 JVM 会无限期缓存响应,或直到 JVM 重新启动。
由于 Azure 资源使用可以更改的 DNS 名称条目,因此建议将 JVM TTL 值设置为 10 秒。 此配置可确保使用下一个 DNS 查询返回资源的更新后 IP 地址。
若要使用 JVM 全局更改所有应用程序的 TTL 值,请设置 java.security
文件中的 networkaddress.cache.ttl
属性。
networkaddress.cache.ttl=10
对于 Java 8,java.security
文件位于 $JAVA_HOME/jre/lib/security
目录中。 对于 Java 11 及更高版本,该文件位于 $JAVA_HOME/conf/security
目录中。
在生成应用以使用 Azure Blob 存储中的数据资源时,代码主要与三种资源类型进行交互:存储帐户、容器和 Blob。 若要详细了解这些资源类型、它们彼此之间的关系以及应用如何与资源交互,请参阅了解应用如何与 Blob 存储数据资源交互。
以下指南介绍了如何使用适用于 Java 的 Azure 存储客户端库来访问数据和执行特定操作:
指南 | 说明 |
---|---|
配置重试策略 | 针对客户端操作实施重试策略。 |
复制 blob | 将 Blob 从一个位置移复制到另一个位置。 |
创建容器 | 创建 Blob 容器。 |
创建用户委托 SAS | 为容器或 blob 创建用户委派 SAS。 |
创建和管理 Blob 租用 | 在 Blob 上建立和管理锁。 |
创建和管理容器租用 | 在容器上建立和管理锁。 |
删除和还原 blob | 删除 Blob;如果启用了软删除,则还原已删除的 Blob。 |
删除和还原容器 | 删除容器;如果启用了软删除,则还原已删除的容器。 |
下载 blob | 使用字符串、流和文件路径下载 Blob。 |
使用标记查找 Blob | 设置和检索标记,以及使用标记来查找 Blob。 |
列出 Blob | 以不同的方式列出 Blob。 |
列出容器 | 列出帐户中的容器以及可用于自定义列表的各个选项。 |
管理属性和元数据 (Blob) | 获取和设置 Blob 的属性与元数据。 |
管理属性和元数据(容器) | 获取和设置容器的属性与元数据。 |
优化数据传输性能 | 优化数据传输操作的性能。 |
设置或更改 blob 的访问层 | 设置或更改块 blob 的访问层。 |
上传 Blob | 了解如何使用字符串、流、文件路径和其他方法上传 Blob。 |