azure-storage-blob-java

Azure Storage Blob SDK for Java

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "azure-storage-blob-java" with this command: npx skills add claudedjale/skillset/claudedjale-skillset-azure-storage-blob-java

Azure Storage Blob SDK for Java

Build blob storage applications using the Azure Storage Blob SDK for Java.

Installation

<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>12.33.0</version> </dependency>

Client Creation

BlobServiceClient

import 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();

With DefaultAzureCredential

import com.azure.identity.DefaultAzureCredentialBuilder;

BlobServiceClient serviceClient = new BlobServiceClientBuilder() .endpoint("<storage-account-url>") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient();

BlobContainerClient

import 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();

BlobClient

import 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();

Core Patterns

Create Container

// Create container serviceClient.createBlobContainer("mycontainer");

// Create if not exists BlobContainerClient container = serviceClient.createBlobContainerIfNotExists("mycontainer");

// From container client containerClient.create(); containerClient.createIfNotExists();

Upload Data

import 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);

Upload from File

blobClient.uploadFromFile("local-file.txt");

// With overwrite blobClient.uploadFromFile("local-file.txt", true);

Upload from Stream

import com.azure.storage.blob.specialized.BlockBlobClient;

BlockBlobClient blockBlobClient = blobClient.getBlockBlobClient();

try (ByteArrayInputStream dataStream = new ByteArrayInputStream(data.getBytes())) { blockBlobClient.upload(dataStream, data.length()); }

Upload with Options

import 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);

}

Upload if Not Exists

import com.azure.storage.blob.models.BlobRequestConditions;

BlobParallelUploadOptions options = new BlobParallelUploadOptions(inputStream, length) .setRequestConditions(new BlobRequestConditions().setIfNoneMatch("*"));

blobClient.uploadWithResponse(options, null, Context.NONE);

Download Data

// Download to BinaryData BinaryData content = blobClient.downloadContent(); String text = content.toString();

// Download to file blobClient.downloadToFile("downloaded-file.txt");

Download to Stream

try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { blobClient.downloadStream(outputStream); byte[] data = outputStream.toByteArray(); }

Download with InputStream

import 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 } }

Upload via OutputStream

import com.azure.storage.blob.specialized.BlobOutputStream;

try (BlobOutputStream blobOS = blobClient.getBlockBlobClient().getBlobOutputStream()) { blobOS.write("Data to upload".getBytes()); }

List Blobs

import 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()); }

List Blobs by Hierarchy

import 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()); } }

Delete Blob

blobClient.delete();

// Delete if exists blobClient.deleteIfExists();

// Delete with snapshots import com.azure.storage.blob.models.DeleteSnapshotsOptionType; blobClient.deleteWithResponse(DeleteSnapshotsOptionType.INCLUDE, null, null, Context.NONE);

Copy Blob

import 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>");

Generate SAS Token

import 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);

Blob Properties and Metadata

import 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);

Lease Blob

import 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();

Error Handling

import 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.) }

Proxy Configuration

import 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();

Environment Variables

AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=... AZURE_STORAGE_ACCOUNT_URL=https://<account>.blob.core.windows.net

Trigger Phrases

  • "Azure Blob Storage Java"

  • "upload download blob"

  • "blob container SDK"

  • "storage streaming"

  • "SAS token generation"

  • "blob metadata properties"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

azure-observability

No summary provided by upstream source.

Repository SourceNeeds Review
General

azure-appconfiguration-java

No summary provided by upstream source.

Repository SourceNeeds Review
General

azure-deploy

No summary provided by upstream source.

Repository SourceNeeds Review
General

azure-kusto

No summary provided by upstream source.

Repository SourceNeeds Review