Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 229% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 365% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 138% | 0% |
Build blob storage applications using the Azure Storage Blob SDK for Java.
xml<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>12.33.0</version> </dependency>
javaimport com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; // With SAS token BlobServiceClient serviceClient = new BlobServiceClientBuilder() .endpoint("<storage-account-url>") .sasToken("<sas-token>") .buildClient(); // With connection string BlobServiceClient serviceClient = new BlobServiceClientBuilder() .connectionString("<connection-string>") .buildClient();
javaimport com.azure.core.credential.TokenCredential; import com.azure.identity.AzureIdentityEnvVars; import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.identity.ManagedIdentityCredentialBuilder; // Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential> TokenCredential credential = new DefaultAzureCredentialBuilder() .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS) .build(); // Or use a specific credential directly in production: // See https://learn.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#credential-classes // TokenCredential credential = new ManagedIdentityCredentialBuilder().build(); BlobServiceClient serviceClient = new BlobServiceClientBuilder() .endpoint("<storage-account-url>") .credential(credential) .buildClient();
javaimport com.azure.storage.blob.BlobContainerClient; // From service client BlobContainerClient containerClient = serviceClient.getBlobContainerClient("mycontainer"); // Direct construction BlobContainerClient containerClient = new BlobContainerClientBuilder() .connectionString("<connection-string>") .containerName("mycontainer") .buildClient();
javaimport com.azure.storage.blob.BlobClient; // From container client BlobClient blobClient = containerClient.getBlobClient("myblob.txt"); // With directory structure BlobClient blobClient = containerClient.getBlobClient("folder/subfolder/myblob.txt"); // Direct construction BlobClient blobClient = new BlobClientBuilder() .connectionString("<connection-string>") .containerName("mycontainer") .blobName("myblob.txt") .buildClient();
java// Create container serviceClient.createBlobContainer("mycontainer"); // Create if not exists BlobContainerClient container = serviceClient.createBlobContainerIfNotExists("mycontainer"); // From container client containerClient.create(); containerClient.createIfNotExists();
javaimport com.azure.core.util.BinaryData; // Upload string String data = "Hello, Azure Blob Storage!"; blobClient.upload(BinaryData.fromString(data)); // Upload with overwrite blobClient.upload(BinaryData.fromString(data), true);
javablobClient.uploadFromFile("local-file.txt"); // With overwrite blobClient.uploadFromFile("local-file.txt", true);
javaimport com.azure.storage.blob.specialized.BlockBlobClient; BlockBlobClient blockBlobClient = blobClient.getBlockBlobClient(); try (ByteArrayInputStream dataStream = new ByteArrayInputStream(data.getBytes())) { blockBlobClient.upload(dataStream, data.length()); }
javaimport com.azure.storage.blob.models.BlobHttpHeaders; import com.azure.storage.blob.options.BlobParallelUploadOptions; BlobHttpHeaders headers = new BlobHttpHeaders() .setContentType("text/plain") .setCacheControl("max-age=3600"); Map<String, String> metadata = Map.of("author", "john", "version", "1.0"); try (InputStream stream = new FileInputStream("large-file.bin")) { BlobParallelUploadOptions options = new BlobParallelUploadOptions(stream) .setHeaders(headers) .setMetadata(metadata); blobClient.uploadWithResponse(options, null, Context.NONE); }
javaimport com.azure.storage.blob.models.BlobRequestConditions; BlobParallelUploadOptions options = new BlobParallelUploadOptions(inputStream, length) .setRequestConditions(new BlobRequestConditions().setIfNoneMatch("*")); blobClient.uploadWithResponse(options, null, Context.NONE);
java// Download to BinaryData BinaryData content = blobClient.downloadContent(); String text = content.toString(); // Download to file blobClient.downloadToFile("downloaded-file.txt");
javatry (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { blobClient.downloadStream(outputStream); byte[] data = outputStream.toByteArray(); }
javaimport com.azure.storage.blob.specialized.BlobInputStream; try (BlobInputStream blobIS = blobClient.openInputStream()) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = blobIS.read(buffer)) != -1) { // Process buffer } }
javaimport com.azure.storage.blob.specialized.BlobOutputStream; try (BlobOutputStream blobOS = blobClient.getBlockBlobClient().getBlobOutputStream()) { blobOS.write("Data to upload".getBytes()); }
javaimport com.azure.storage.blob.models.BlobItem; // List all blobs for (BlobItem blobItem : containerClient.listBlobs()) { System.out.println("Blob: " + blobItem.getName()); } // List with prefix (virtual directory) import com.azure.storage.blob.models.ListBlobsOptions; ListBlobsOptions options = new ListBlobsOptions().setPrefix("folder/"); for (BlobItem blobItem : containerClient.listBlobs(options, null)) { System.out.println("Blob: " + blobItem.getName()); }
javaimport com.azure.storage.blob.models.BlobListDetails; String delimiter = "/"; ListBlobsOptions options = new ListBlobsOptions() .setPrefix("data/") .setDetails(new BlobListDetails().setRetrieveMetadata(true)); for (BlobItem item : containerClient.listBlobsByHierarchy(delimiter, options, null)) { if (item.isPrefix()) { System.out.println("Directory: " + item.getName()); } else { System.out.println("Blob: " + item.getName()); } }
javablobClient.delete(); // Delete if exists blobClient.deleteIfExists(); // Delete with snapshots import com.azure.storage.blob.models.DeleteSnapshotsOptionType; blobClient.deleteWithResponse(DeleteSnapshotsOptionType.INCLUDE, null, null, Context.NONE);
javaimport com.azure.storage.blob.models.BlobCopyInfo; import com.azure.core.util.polling.SyncPoller; // Async copy (for large blobs or cross-account) SyncPoller<BlobCopyInfo, Void> poller = blobClient.beginCopy("<source-blob-url>", Duration.ofSeconds(1)); poller.waitForCompletion(); // Sync copy from URL (for same account) blobClient.copyFromUrl("<source-blob-url>");
javaimport com.azure.storage.blob.sas.*; import java.time.OffsetDateTime; // Blob-level SAS BlobSasPermission permissions = new BlobSasPermission().setReadPermission(true); OffsetDateTime expiry = OffsetDateTime.now().plusDays(1); BlobServiceSasSignatureValues sasValues = new BlobServiceSasSignatureValues(expiry, permissions); String sasToken = blobClient.generateSas(sasValues); // Container-level SAS BlobContainerSasPermission containerPermissions = new BlobContainerSasPermission() .setReadPermission(true) .setListPermission(true); BlobServiceSasSignatureValues containerSasValues = new BlobServiceSasSignatureValues(expiry, containerPermissions); String containerSas = containerClient.generateSas(containerSasValues);
javaimport com.azure.storage.blob.models.BlobProperties; // Get properties BlobProperties properties = blobClient.getProperties(); System.out.println("Size: " + properties.getBlobSize()); System.out.println("Content-Type: " + properties.getContentType()); System.out.println("Last Modified: " + properties.getLastModified()); // Set metadata Map<String, String> metadata = Map.of("key1", "value1", "key2", "value2"); blobClient.setMetadata(metadata); // Set HTTP headers BlobHttpHeaders headers = new BlobHttpHeaders() .setContentType("application/json") .setCacheControl("max-age=86400"); blobClient.setHttpHeaders(headers);
javaimport com.azure.storage.blob.specialized.BlobLeaseClient; import com.azure.storage.blob.specialized.BlobLeaseClientBuilder; BlobLeaseClient leaseClient = new BlobLeaseClientBuilder() .blobClient(blobClient) .buildClient(); // Acquire lease (-1 for infinite) String leaseId = leaseClient.acquireLease(60); // Renew lease leaseClient.renewLease(); // Release lease leaseClient.releaseLease();
javaimport com.azure.storage.blob.models.BlobStorageException; try { blobClient.download(outputStream); } catch (BlobStorageException e) { System.out.println("Status: " + e.getStatusCode()); System.out.println("Error code: " + e.getErrorCode()); // 404 = Blob not found // 409 = Conflict (lease, etc.) }
javaimport com.azure.core.http.ProxyOptions; import com.azure.core.http.netty.NettyAsyncHttpClientBuilder; import java.net.InetSocketAddress; ProxyOptions proxyOptions = new ProxyOptions( ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888)); BlobServiceClient client = new BlobServiceClientBuilder() .endpoint("<endpoint>") .sasToken("<sas-token>") .httpClient(new NettyAsyncHttpClientBuilder().proxy(proxyOptions).build()) .buildClient();
bashAZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=... # Alternative to Entra ID auth AZURE_STORAGE_ACCOUNT_URL=https://<account>.blob.core.windows.net # Required for all auth methods AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
Other measured skills in the registry, with their headline benchmark lift.