Skip to main content سوق المهارات اكتشف واستكشف مهارات الذكاء الاصطناعي التي بناها المجتمع.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
نسخ Promptعرض تفاصيل Prompt يتجاوز الأمر المباشر Prompt المخصّص للمراجعة. افحص المصدر قبل تشغيله.
npx skills add https://github.com/BEKO2210/Firstbrain --skill azure-storage-blob-tsيبقى الأمر في سطر واحد. مرّر أفقيًا لمراجعته كاملًا قبل النسخ.
تفضّل نسخة محلية؟ نزّل الملفات المتاحة حاليًا لدى SkillsMP.
تحميل Zip جاري التحميل... المهن ذات الصلة SOC
استنادا إلى تصنيف 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]]