Skip to main content Skills Marketplace Descubra e explore skills de IA criadas pela comunidade.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Copiar promptMostrar detalhes do prompt Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
npx skills add https://github.com/BEKO2210/Firstbrain --skill azure-storage-blob-tsO comando permanece em uma só linha. Role horizontalmente para revisá-lo antes de copiar.
Prefere uma cópia local? Baixe os arquivos disponíveis atualmente no SkillsMP.
Baixar Zip Baixando... Ocupações relacionadas SOC
Baseado na classificação ocupacional SOC
name azure-storage-blob-ts description Azure Blob Storage JavaScript/TypeScript SDK (@azure/storage-blob) for blob operations. Use for uploading, downloading, listing, and managing blobs and containers. type skill created 2026-02-27T00:00:00.000Z domain cloud-infrastructure category azure risk unknown source community tags ["skill","cloud-infrastructure","azure","storage","blob"]
@azure/storage-blob (TypeScript/JavaScript)
SDK for Azure Blob Storage operations — upload, download, list, and manage blobs and containers.
Installation
npm install @azure/storage-blob @azure/identity
Current Version : 12.x
Node.js : >= 18.0.0
Environment Variables
AZURE_STORAGE_ACCOUNT_NAME=<account-name>
AZURE_STORAGE_ACCOUNT_KEY=<account-key>
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
Authentication
DefaultAzureCredential (Recommended)
import { BlobServiceClient } from "@azure/storage-blob" ;
import { DefaultAzureCredential } from "@azure/identity" ;
const accountName = process.env .AZURE_STORAGE_ACCOUNT_NAME !;
const client = new BlobServiceClient (
`https://${accountName} .blob.core.windows.net` ,
new DefaultAzureCredential ()
);
Connection String
import { BlobServiceClient } from "@azure/storage-blob" ;
const client = BlobServiceClient .fromConnectionString (
process.env .AZURE_STORAGE_CONNECTION_STRING !
);
StorageSharedKeyCredential (Node.js only)
import { BlobServiceClient , StorageSharedKeyCredential } from ;
accountName = process. . !;
accountKey = process. . !;
sharedKeyCredential = (accountName, accountKey);
client = (
,
sharedKeyCredential
);
"@azure/storage-blob"
const
env
AZURE_STORAGE_ACCOUNT_NAME
const
env
AZURE_STORAGE_ACCOUNT_KEY
const
new
StorageSharedKeyCredential
const
new
BlobServiceClient
`https://${accountName} .blob.core.windows.net`
SAS Token import { BlobServiceClient } from "@azure/storage-blob" ;
const accountName = process.env .AZURE_STORAGE_ACCOUNT_NAME !;
const sasToken = process.env .AZURE_STORAGE_SAS_TOKEN !;
const client = new BlobServiceClient (
`https://${accountName} .blob.core.windows.net${sasToken} `
);
Client Hierarchy BlobServiceClient (account level)
└── ContainerClient (container level)
└── BlobClient (blob level)
├── BlockBlobClient (block blobs - most common)
├── AppendBlobClient (append-only blobs)
└── PageBlobClient (page blobs - VHDs)
Container Operations
Create Container const containerClient = client.getContainerClient ("my-container" );
await containerClient.create ();
await containerClient.createIfNotExists ();
List Containers for await (const container of client.listContainers ()) {
console .log (container.name );
}
for await (const container of client.listContainers ({ prefix : "logs-" })) {
console .log (container.name );
}
Delete Container await containerClient.delete ();
await containerClient.deleteIfExists ();
Blob Operations
Upload Blob (Simple) const containerClient = client.getContainerClient ("my-container" );
const blockBlobClient = containerClient.getBlockBlobClient ("my-file.txt" );
await blockBlobClient.upload ("Hello, World!" , 13 );
const buffer = Buffer .from ("Hello, World!" );
await blockBlobClient.upload (buffer, buffer.length );
Upload from File (Node.js only) const blockBlobClient = containerClient.getBlockBlobClient ("uploaded-file.txt" );
await blockBlobClient.uploadFile ("/path/to/local/file.txt" );
Upload from Stream (Node.js only) import * as fs from "fs" ;
const blockBlobClient = containerClient.getBlockBlobClient ("streamed-file.txt" );
const readStream = fs.createReadStream ("/path/to/local/file.txt" );
await blockBlobClient.uploadStream (readStream, 4 * 1024 * 1024 , 5 , {
onProgress : (progress ) => console .log (`Uploaded ${progress.loadedBytes} bytes` ),
});
Upload from Browser const blockBlobClient = containerClient.getBlockBlobClient ("browser-upload.txt" );
const fileInput = document .getElementById ("fileInput" ) as HTMLInputElement ;
const file = fileInput.files ![0 ];
await blockBlobClient.uploadData (file);
const arrayBuffer = new ArrayBuffer (1024 );
await blockBlobClient.uploadData (arrayBuffer);
Download Blob const blobClient = containerClient.getBlobClient ("my-file.txt" );
const downloadResponse = await blobClient.download ();
const downloaded = await streamToText (downloadResponse.readableStreamBody !);
async function streamToText (readable : NodeJS .ReadableStream ): Promise <string > {
const chunks : Buffer [] = [];
for await (const chunk of readable) {
chunks.push (Buffer .from (chunk));
}
return Buffer .concat (chunks).toString ("utf-8" );
}
Download to File (Node.js only) const blockBlobClient = containerClient.getBlockBlobClient ("my-file.txt" );
await blockBlobClient.downloadToFile ("/path/to/local/destination.txt" );
Download to Buffer (Node.js only) const blockBlobClient = containerClient.getBlockBlobClient ("my-file.txt" );
const buffer = await blockBlobClient.downloadToBuffer ();
console .log (buffer.toString ());
List Blobs
for await (const blob of containerClient.listBlobsFlat ()) {
console .log (blob.name , blob.properties .contentLength );
}
for await (const blob of containerClient.listBlobsFlat ({ prefix : "logs/" })) {
console .log (blob.name );
}
for await (const item of containerClient.listBlobsByHierarchy ("/" )) {
if (item.kind === "prefix" ) {
console .log (`Directory: ${item.name} ` );
} else {
console .log (`Blob: ${item.name} ` );
}
}
Delete Blob const blobClient = containerClient.getBlobClient ("my-file.txt" );
await blobClient.delete ();
await blobClient.deleteIfExists ();
await blobClient.delete ({ deleteSnapshots : "include" });
Copy Blob const sourceBlobClient = containerClient.getBlobClient ("source.txt" );
const destBlobClient = containerClient.getBlobClient ("destination.txt" );
const copyPoller = await destBlobClient.beginCopyFromURL (sourceBlobClient.url );
await copyPoller.pollUntilDone ();
Blob Properties & Metadata
Get Properties const blobClient = containerClient.getBlobClient ("my-file.txt" );
const properties = await blobClient.getProperties ();
console .log ("Content-Type:" , properties.contentType );
console .log ("Content-Length:" , properties.contentLength );
console .log ("Last Modified:" , properties.lastModified );
console .log ("ETag:" , properties.etag );
Set Metadata await blobClient.setMetadata ({
author : "John Doe" ,
category : "documents" ,
});
Set HTTP Headers await blobClient.setHTTPHeaders ({
blobContentType : "text/plain" ,
blobCacheControl : "max-age=3600" ,
blobContentDisposition : "attachment; filename=download.txt" ,
});
SAS Token Generation (Node.js only)
Generate Blob SAS import {
BlobSASPermissions ,
generateBlobSASQueryParameters,
StorageSharedKeyCredential ,
} from "@azure/storage-blob" ;
const sharedKeyCredential = new StorageSharedKeyCredential (accountName, accountKey);
const sasToken = generateBlobSASQueryParameters (
{
containerName : "my-container" ,
blobName : "my-file.txt" ,
permissions : BlobSASPermissions .parse ("r" ),
startsOn : new Date (),
expiresOn : new Date (Date .now () + 3600 * 1000 ),
},
sharedKeyCredential
).toString ();
const sasUrl = `https://${accountName} .blob.core.windows.net/my-container/my-file.txt?${sasToken} ` ;
Generate Container SAS import { ContainerSASPermissions , generateBlobSASQueryParameters } from "@azure/storage-blob" ;
const sasToken = generateBlobSASQueryParameters (
{
containerName : "my-container" ,
permissions : ContainerSASPermissions .parse ("racwdl" ),
expiresOn : new Date (Date .now () + 24 * 3600 * 1000 ),
},
sharedKeyCredential
).toString ();
Generate Account SAS import {
AccountSASPermissions ,
AccountSASResourceTypes ,
AccountSASServices ,
generateAccountSASQueryParameters,
} from "@azure/storage-blob" ;
const sasToken = generateAccountSASQueryParameters (
{
services : AccountSASServices .parse ("b" ).toString (),
resourceTypes : AccountSASResourceTypes .parse ("sco" ).toString (),
permissions : AccountSASPermissions .parse ("rwdlacupi" ),
expiresOn : new Date (Date .now () + 24 * 3600 * 1000 ),
},
sharedKeyCredential
).toString ();
Blob Types
Block Blob (Default) Most common type for text and binary files.
const blockBlobClient = containerClient.getBlockBlobClient ("document.pdf" );
await blockBlobClient.uploadFile ("/path/to/document.pdf" );
Append Blob Optimized for append operations (logs, audit trails).
const appendBlobClient = containerClient.getAppendBlobClient ("app.log" );
await appendBlobClient.create ();
await appendBlobClient.appendBlock ("Log entry 1\n" , 12 );
await appendBlobClient.appendBlock ("Log entry 2\n" , 12 );
Page Blob Fixed-size blobs for random read/write (VHDs).
const pageBlobClient = containerClient.getPageBlobClient ("disk.vhd" );
await pageBlobClient.create (1024 * 1024 );
const buffer = Buffer .alloc (512 );
await pageBlobClient.uploadPages (buffer, 0 , 512 );
Error Handling import { RestError } from "@azure/storage-blob" ;
try {
await containerClient.create ();
} catch (error) {
if (error instanceof RestError ) {
switch (error.statusCode ) {
case 404 :
console .log ("Container not found" );
break ;
case 409 :
console .log ("Container already exists" );
break ;
case 403 :
console .log ("Access denied" );
break ;
default :
console .error (`Storage error ${error.statusCode} : ${error.message} ` );
}
}
throw error;
}
TypeScript Types Reference import {
BlobServiceClient ,
ContainerClient ,
BlobClient ,
BlockBlobClient ,
AppendBlobClient ,
PageBlobClient ,
StorageSharedKeyCredential ,
AnonymousCredential ,
BlobSASPermissions ,
ContainerSASPermissions ,
AccountSASPermissions ,
AccountSASServices ,
AccountSASResourceTypes ,
generateBlobSASQueryParameters,
generateAccountSASQueryParameters,
BlobDownloadResponseParsed ,
BlobUploadCommonResponse ,
ContainerCreateResponse ,
BlobItem ,
ContainerItem ,
RestError ,
} from "@azure/storage-blob" ;
Best Practices
Use DefaultAzureCredential — Prefer AAD over connection strings/keys
Use streaming for large files — uploadStream/downloadToFile for files > 256MB
Set appropriate content types — Use setHTTPHeaders for correct MIME types
Use SAS tokens for client access — Generate short-lived tokens for browser uploads
Handle errors gracefully — Check RestError.statusCode for specific handling
Use *IfNotExists methods — For idempotent container/blob creation
Close clients — Not required but good practice in long-running apps
Platform Differences Feature Node.js Browser StorageSharedKeyCredential✅ ❌ uploadFile()✅ ❌ uploadStream()✅ ❌ downloadToFile()✅ ❌ downloadToBuffer()✅ ❌ uploadData()✅ ✅ SAS generation ✅ ❌ DefaultAzureCredential ✅ ❌ Anonymous/SAS access ✅ ✅
When to Use This skill is applicable to execute the workflow or actions described in the overview.
Connections
Domain: [[Cloud & Infrastruktur]]
Kategorie: [[Microsoft Azure]]
Navigation: [[Skills Uebersicht]], [[Home]]