如何使用Java获取Azure Blob存储中已上传文件的Blob URL
用Java获取Azure Blob文件的URL(基于ConnectionString)
嘿,这事儿挺简单的,我给你分两种常见场景来讲解——毕竟Blob容器的访问权限不同,获取URL的方式也略有区别:
1. 场景一:容器设置了公共访问权限
如果你的Blob容器是公共读或者完全公开的,那直接获取Blob的原始URL就行,代码如下:
首先得确保你的项目里引入了Azure Storage Blob的SDK,Maven项目的话,在pom.xml里加这个依赖:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>12.25.0</version> <!-- 用最新稳定版即可 --> </dependency>
然后写核心代码:
import com.azure.storage.blob.BlobClient; import com.azure.storage.blob.BlobContainerClient; import com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; public class GetBlobUrlExample { public static void main(String[] args) { // 替换成你的实际配置 String connectionString = "你的Azure Blob连接字符串"; String containerName = "目标容器名称"; String blobName = "已上传的文件名"; // 1. 创建Blob服务客户端 BlobServiceClient blobServiceClient = new BlobServiceClientBuilder() .connectionString(connectionString) .build(); // 2. 获取容器客户端 BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName); // 3. 获取Blob客户端 BlobClient blobClient = containerClient.getBlobClient(blobName); // 4. 获取Blob的公共可访问URL String blobUrl = blobClient.getBlobUrl(); System.out.println("Blob的公共URL:" + blobUrl); } }
这段代码会直接返回Blob的可访问URL,只要容器是公共的,拿到就能直接用。
2. 场景二:容器是私有访问(默认情况)
Azure Blob容器默认是私有权限,直接拿到的URL无法访问,这时候需要生成SAS(共享访问签名)URL——这是带临时权限的访问链接,你可以控制它的有效期和操作权限。
核心代码在上面的基础上扩展:
import com.azure.storage.blob.BlobClient; import com.azure.storage.blob.BlobContainerClient; import com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.storage.blob.sas.BlobSasPermission; import com.azure.storage.blob.sas.BlobServiceSasSignatureValues; import java.time.OffsetDateTime; public class GetBlobSasUrlExample { public static void main(String[] args) { // 替换成你的实际配置 String connectionString = "你的Azure Blob连接字符串"; String containerName = "目标容器名称"; String blobName = "已上传的文件名"; BlobServiceClient blobServiceClient = new BlobServiceClientBuilder() .connectionString(connectionString) .build(); BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName); BlobClient blobClient = containerClient.getBlobClient(blobName); // 配置SAS权限:这里设为只读,你也可以改成读写、删除等 BlobSasPermission sasPermission = new BlobSasPermission().setReadPermission(true); // 设置SAS过期时间:比如1小时后失效 OffsetDateTime expiryTime = OffsetDateTime.now().plusHours(1); // 生成SAS令牌 String sasToken = blobClient.generateBlobSas(new BlobServiceSasSignatureValues(expiryTime, sasPermission)); // 拼接成可访问的SAS URL String sasUrl = blobClient.getBlobUrl() + "?" + sasToken; System.out.println("带SAS权限的Blob URL:" + sasUrl); } }
这个SAS URL在过期前可以正常访问私有Blob,你可以根据需求灵活调整权限和过期时长。
小提醒
- 记得把代码里的占位符替换成你自己的实际值
- SDK版本尽量用最新稳定版,避免兼容性问题
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

