sickn33/antigravity-awesome-skills/azure-storage-blob-java

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

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

Install

npx vskill@latest install sickn33/antigravity-awesome-skills/azure-storage-blob-java

SKILL.md

Azure Storage Blob SDK for Java

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

Installation

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

Client Creation

BlobServiceClient
java
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
java
import com.azure.identity.DefaultAzureCredentialBuilder;
BlobServiceClient serviceClient = new BlobServiceClientBuilder()
.endpoint("<storage-account-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
BlobContainerClient
java
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
java
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();

Storage and bearer-token scope

Verify the account/container/key and current SDK signatures before adapting these independent snippets. Overwrite, snapshot deletion, metadata/header replacement and cross-account copies require exact-target authority and concurrency conditions where needed. Bound in-memory downloads; prefer streaming for large blobs. A SAS is a bearer credential: authorize the object and caller, minimize permission/expiry, use HTTPS, avoid logs and prefer user-delegation SAS where applicable. generateSas needs the appropriate signing credential; DefaultAzureCredential alone does not make that method account-key signing. Check copy completion status and failures rather than assuming waiting guarantees success.

Core Patterns

Create Container
java
// Create container
serviceClient.createBlobContainer("mycontainer");
// Create if not exists
BlobContainerClient container = serviceClient.createBlobContainerIfNotExists("mycontainer");
// From container client
containerClient.create();
containerClient.createIfNotExists();
Upload Data
java
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
java
blobClient.uploadFromFile("local-file.txt");
// With overwrite
blobClient.uploadFromFile("local-file.txt", true);
Upload from Stream
java
import com.azure.storage.blob.specialized.BlockBlobClient;
BlockBlobClient blockBlobClient = blobClient.getBlockBlobClient();
byte[] utf8 = data.getBytes(java.nio.charset.StandardCharsets.UTF_8);
try (ByteArrayInputStream dataStream = new ByteArrayInputStream(utf8)) {
blockBlobClient.upload(dataStream, utf8.length);
}
Upload with Options
java
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
java
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
java
// Download to BinaryData
BinaryData content = blobClient.downloadContent();
String text = content.toString();
// Download to file
blobClient.downloadToFile("downloaded-file.txt");
Download to Stream
java
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
blobClient.downloadStream(outputStream);
byte[] data = outputStream.toByteArray();
}
Download with InputStream
java
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
java
import com.azure.storage.blob.specialized.BlobOutputStream;
try (BlobOutputStream blobOS = blobClient.getBlockBlobClient().getBlobOutputStream()) {
blobOS.write("Data to upload".getBytes());
}
List Blobs
java
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
java
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
java
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
java
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
java
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
java
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
java
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

java
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

java
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

bash
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"

When to Use

This skill is applicable to execute the workflow or actions described in the overview.

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

Security

  • Security scanPassed, 93 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationWarning, 83 of 100Marginal. 1 run. Evaluated 7 months ago.

Source

Popularity

Repository stars
26,650
Repository forks
4,541
Repository npm downloads, 7 days
5,562
7-day trend score
72

Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 23 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/sickn33/antigravity-awesome-skills/azure-storage-blob-java/badge)](https://verified-skill.com/skills/sickn33/antigravity-awesome-skills/azure-storage-blob-java)

Something wrong with this skill or its page? Tell us.