Build blob storage applications with Azure Storage Blob SDK for Java. Use when uploading, downloading, or managing files in Azure Blob Storage, working with containers, or implementing streaming data operations.
Add this skill
npx mdskills install sickn33/azure-storage-blob-javaComprehensive SDK reference with extensive examples covering all major blob operations and patterns
1---2name: azure-storage-blob-java3description: Build blob storage applications with Azure Storage Blob SDK for Java. Use when uploading, downloading, or managing files in Azure Blob Storage, working with containers, or implementing streaming data operations.4package: com.azure:azure-storage-blob5---67# Azure Storage Blob SDK for Java89Build blob storage applications using the Azure Storage Blob SDK for Java.1011## Installation1213```xml14<dependency>15 <groupId>com.azure</groupId>16 <artifactId>azure-storage-blob</artifactId>17 <version>12.33.0</version>18</dependency>19```2021## Client Creation2223### BlobServiceClient2425```java26import com.azure.storage.blob.BlobServiceClient;27import com.azure.storage.blob.BlobServiceClientBuilder;2829// With SAS token30BlobServiceClient serviceClient = new BlobServiceClientBuilder()31 .endpoint("<storage-account-url>")32 .sasToken("<sas-token>")33 .buildClient();3435// With connection string36BlobServiceClient serviceClient = new BlobServiceClientBuilder()37 .connectionString("<connection-string>")38 .buildClient();39```4041### With DefaultAzureCredential4243```java44import com.azure.identity.DefaultAzureCredentialBuilder;4546BlobServiceClient serviceClient = new BlobServiceClientBuilder()47 .endpoint("<storage-account-url>")48 .credential(new DefaultAzureCredentialBuilder().build())49 .buildClient();50```5152### BlobContainerClient5354```java55import com.azure.storage.blob.BlobContainerClient;5657// From service client58BlobContainerClient containerClient = serviceClient.getBlobContainerClient("mycontainer");5960// Direct construction61BlobContainerClient containerClient = new BlobContainerClientBuilder()62 .connectionString("<connection-string>")63 .containerName("mycontainer")64 .buildClient();65```6667### BlobClient6869```java70import com.azure.storage.blob.BlobClient;7172// From container client73BlobClient blobClient = containerClient.getBlobClient("myblob.txt");7475// With directory structure76BlobClient blobClient = containerClient.getBlobClient("folder/subfolder/myblob.txt");7778// Direct construction79BlobClient blobClient = new BlobClientBuilder()80 .connectionString("<connection-string>")81 .containerName("mycontainer")82 .blobName("myblob.txt")83 .buildClient();84```8586## Core Patterns8788### Create Container8990```java91// Create container92serviceClient.createBlobContainer("mycontainer");9394// Create if not exists95BlobContainerClient container = serviceClient.createBlobContainerIfNotExists("mycontainer");9697// From container client98containerClient.create();99containerClient.createIfNotExists();100```101102### Upload Data103104```java105import com.azure.core.util.BinaryData;106107// Upload string108String data = "Hello, Azure Blob Storage!";109blobClient.upload(BinaryData.fromString(data));110111// Upload with overwrite112blobClient.upload(BinaryData.fromString(data), true);113```114115### Upload from File116117```java118blobClient.uploadFromFile("local-file.txt");119120// With overwrite121blobClient.uploadFromFile("local-file.txt", true);122```123124### Upload from Stream125126```java127import com.azure.storage.blob.specialized.BlockBlobClient;128129BlockBlobClient blockBlobClient = blobClient.getBlockBlobClient();130131try (ByteArrayInputStream dataStream = new ByteArrayInputStream(data.getBytes())) {132 blockBlobClient.upload(dataStream, data.length());133}134```135136### Upload with Options137138```java139import com.azure.storage.blob.models.BlobHttpHeaders;140import com.azure.storage.blob.options.BlobParallelUploadOptions;141142BlobHttpHeaders headers = new BlobHttpHeaders()143 .setContentType("text/plain")144 .setCacheControl("max-age=3600");145146Map<String, String> metadata = Map.of("author", "john", "version", "1.0");147148try (InputStream stream = new FileInputStream("large-file.bin")) {149 BlobParallelUploadOptions options = new BlobParallelUploadOptions(stream)150 .setHeaders(headers)151 .setMetadata(metadata);152153 blobClient.uploadWithResponse(options, null, Context.NONE);154}155```156157### Upload if Not Exists158159```java160import com.azure.storage.blob.models.BlobRequestConditions;161162BlobParallelUploadOptions options = new BlobParallelUploadOptions(inputStream, length)163 .setRequestConditions(new BlobRequestConditions().setIfNoneMatch("*"));164165blobClient.uploadWithResponse(options, null, Context.NONE);166```167168### Download Data169170```java171// Download to BinaryData172BinaryData content = blobClient.downloadContent();173String text = content.toString();174175// Download to file176blobClient.downloadToFile("downloaded-file.txt");177```178179### Download to Stream180181```java182try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {183 blobClient.downloadStream(outputStream);184 byte[] data = outputStream.toByteArray();185}186```187188### Download with InputStream189190```java191import com.azure.storage.blob.specialized.BlobInputStream;192193try (BlobInputStream blobIS = blobClient.openInputStream()) {194 byte[] buffer = new byte[1024];195 int bytesRead;196 while ((bytesRead = blobIS.read(buffer)) != -1) {197 // Process buffer198 }199}200```201202### Upload via OutputStream203204```java205import com.azure.storage.blob.specialized.BlobOutputStream;206207try (BlobOutputStream blobOS = blobClient.getBlockBlobClient().getBlobOutputStream()) {208 blobOS.write("Data to upload".getBytes());209}210```211212### List Blobs213214```java215import com.azure.storage.blob.models.BlobItem;216217// List all blobs218for (BlobItem blobItem : containerClient.listBlobs()) {219 System.out.println("Blob: " + blobItem.getName());220}221222// List with prefix (virtual directory)223import com.azure.storage.blob.models.ListBlobsOptions;224225ListBlobsOptions options = new ListBlobsOptions().setPrefix("folder/");226for (BlobItem blobItem : containerClient.listBlobs(options, null)) {227 System.out.println("Blob: " + blobItem.getName());228}229```230231### List Blobs by Hierarchy232233```java234import com.azure.storage.blob.models.BlobListDetails;235236String delimiter = "/";237ListBlobsOptions options = new ListBlobsOptions()238 .setPrefix("data/")239 .setDetails(new BlobListDetails().setRetrieveMetadata(true));240241for (BlobItem item : containerClient.listBlobsByHierarchy(delimiter, options, null)) {242 if (item.isPrefix()) {243 System.out.println("Directory: " + item.getName());244 } else {245 System.out.println("Blob: " + item.getName());246 }247}248```249250### Delete Blob251252```java253blobClient.delete();254255// Delete if exists256blobClient.deleteIfExists();257258// Delete with snapshots259import com.azure.storage.blob.models.DeleteSnapshotsOptionType;260blobClient.deleteWithResponse(DeleteSnapshotsOptionType.INCLUDE, null, null, Context.NONE);261```262263### Copy Blob264265```java266import com.azure.storage.blob.models.BlobCopyInfo;267import com.azure.core.util.polling.SyncPoller;268269// Async copy (for large blobs or cross-account)270SyncPoller<BlobCopyInfo, Void> poller = blobClient.beginCopy("<source-blob-url>", Duration.ofSeconds(1));271poller.waitForCompletion();272273// Sync copy from URL (for same account)274blobClient.copyFromUrl("<source-blob-url>");275```276277### Generate SAS Token278279```java280import com.azure.storage.blob.sas.*;281import java.time.OffsetDateTime;282283// Blob-level SAS284BlobSasPermission permissions = new BlobSasPermission().setReadPermission(true);285OffsetDateTime expiry = OffsetDateTime.now().plusDays(1);286287BlobServiceSasSignatureValues sasValues = new BlobServiceSasSignatureValues(expiry, permissions);288String sasToken = blobClient.generateSas(sasValues);289290// Container-level SAS291BlobContainerSasPermission containerPermissions = new BlobContainerSasPermission()292 .setReadPermission(true)293 .setListPermission(true);294295BlobServiceSasSignatureValues containerSasValues = new BlobServiceSasSignatureValues(expiry, containerPermissions);296String containerSas = containerClient.generateSas(containerSasValues);297```298299### Blob Properties and Metadata300301```java302import com.azure.storage.blob.models.BlobProperties;303304// Get properties305BlobProperties properties = blobClient.getProperties();306System.out.println("Size: " + properties.getBlobSize());307System.out.println("Content-Type: " + properties.getContentType());308System.out.println("Last Modified: " + properties.getLastModified());309310// Set metadata311Map<String, String> metadata = Map.of("key1", "value1", "key2", "value2");312blobClient.setMetadata(metadata);313314// Set HTTP headers315BlobHttpHeaders headers = new BlobHttpHeaders()316 .setContentType("application/json")317 .setCacheControl("max-age=86400");318blobClient.setHttpHeaders(headers);319```320321### Lease Blob322323```java324import com.azure.storage.blob.specialized.BlobLeaseClient;325import com.azure.storage.blob.specialized.BlobLeaseClientBuilder;326327BlobLeaseClient leaseClient = new BlobLeaseClientBuilder()328 .blobClient(blobClient)329 .buildClient();330331// Acquire lease (-1 for infinite)332String leaseId = leaseClient.acquireLease(60);333334// Renew lease335leaseClient.renewLease();336337// Release lease338leaseClient.releaseLease();339```340341## Error Handling342343```java344import com.azure.storage.blob.models.BlobStorageException;345346try {347 blobClient.download(outputStream);348} catch (BlobStorageException e) {349 System.out.println("Status: " + e.getStatusCode());350 System.out.println("Error code: " + e.getErrorCode());351 // 404 = Blob not found352 // 409 = Conflict (lease, etc.)353}354```355356## Proxy Configuration357358```java359import com.azure.core.http.ProxyOptions;360import com.azure.core.http.netty.NettyAsyncHttpClientBuilder;361import java.net.InetSocketAddress;362363ProxyOptions proxyOptions = new ProxyOptions(364 ProxyOptions.Type.HTTP,365 new InetSocketAddress("localhost", 8888));366367BlobServiceClient client = new BlobServiceClientBuilder()368 .endpoint("<endpoint>")369 .sasToken("<sas-token>")370 .httpClient(new NettyAsyncHttpClientBuilder().proxy(proxyOptions).build())371 .buildClient();372```373374## Environment Variables375376```bash377AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...378AZURE_STORAGE_ACCOUNT_URL=https://<account>.blob.core.windows.net379```380381## Trigger Phrases382383- "Azure Blob Storage Java"384- "upload download blob"385- "blob container SDK"386- "storage streaming"387- "SAS token generation"388- "blob metadata properties"389
Full transparency — inspect the skill content before installing.