Az Azure Blob Storage és a TypeScript használatának első lépései
Ez a cikk bemutatja, hogyan csatlakozhat az Azure Blob Storage-hoz az Azure Blob Storage JavaScripthez készült ügyfélkódtárával. A csatlakozás után a kód a Blob Storage szolgáltatás tárolóira, blobokra és funkcióira is képes.
Csomag (npm) | API-referencia | kódtár forráskódja | Visszajelzés küldése
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Node.js LTS
- Az ügyfélalkalmazásokhoz csomagküldő eszközökre van szükség.
A projekt beállítása
Nyisson meg egy parancssort, és váltson a projektmappára. Módosítsa
YOUR-DIRECTORY
a mappa nevét:cd YOUR-DIRECTORY
Ha még nem rendelkezik fájllal
package.json
a címtárban, inicializálja a projektet a fájl létrehozásához:npm init -y
Telepítse a TypeScriptet és az Azure Blob Storage JavaScript-ügyfélkódtárát a TypeScript-típusok közé:
npm install typescript @azure/storage-blob
Ha jelszó nélküli kapcsolatokat szeretne használni a Microsoft Entra ID használatával, telepítse az Azure Identity JavaScript-ügyfélkódtárát:
npm install @azure/identity
Hozzáférés engedélyezése és csatlakozás a Blob Storage-hoz
A Microsoft Entra ID biztosítja a legbiztonságosabb kapcsolatot a kapcsolati identitás (felügyelt identitás) kezelésével. Ez a jelszó nélküli funkció lehetővé teszi olyan alkalmazás fejlesztését, amely nem igényel titkos kulcsokat (kulcsokat vagy kapcsolati sztring) a kódban.
Identitáshozzáférés beállítása az Azure-felhőhöz
Ha jelszó nélkül szeretne csatlakozni az Azure-hoz, be kell állítania egy Azure-identitást, vagy egy meglévő identitást kell használnia. Az identitás beállítása után mindenképpen rendelje hozzá a megfelelő szerepköröket az identitáshoz.
A Jelszó nélküli hozzáférés Microsoft Entra-azonosítóval való engedélyezéséhez Azure-hitelesítő adatokat kell használnia. A szükséges hitelesítő adatok típusa attól függ, hogy az alkalmazás hol fut. Használja ezt a táblázatot útmutatóként.
Environment | Method |
---|---|
Fejlesztői környezet | Visual Studio Code |
Fejlesztői környezet | Egyszerű szolgáltatás |
Azure-ban üzemeltetett alkalmazások | Az Azure által üzemeltetett alkalmazások beállítása |
Helyszíni | Helyszíni alkalmazás beállítása |
Tárfiók-szerepkörök beállítása
A tárolási erőforrásnak az alábbi Azure RBAC-szerepkörök közül legalább egynek hozzá kell rendelnie ahhoz az identitáserőforráshoz, amelyhez csatlakozni szeretne. Állítsa be az Azure Storage-szerepköröket az előző lépésben létrehozott összes identitáshoz: Azure-felhő, helyi fejlesztés, helyszíni.
A beállítás befejezése után minden identitásnak szüksége van legalább egy megfelelő szerepkörre:
Adatelérési szerepkör – például:
- Storage-blobadatok olvasója
- Storage blobadat-közreműködő
Erőforrás-szerepkör – például:
- Olvasó
- Közreműködő
Az alkalmazás összeállítása
Az alkalmazás létrehozásakor a kód elsősorban három erőforrástípussal fog működni:
- A tárfiók, amely az Azure Storage-adatok egyedi legfelső szintű névtere.
- Tárolók, amelyek a blobadatokat a tárfiókban rendezik.
- Blobok, amelyek strukturálatlan adatokat, például szöveges és bináris adatokat tárolnak.
Az alábbi ábra az ezen erőforrások közötti kapcsolatot mutatja be.
Minden erőforrástípust egy vagy több társított JavaScript-ügyfél jelöl:
Osztály | Leírás |
---|---|
BlobServiceClient | A tárfiók Blob Storage-végpontját jelöli. |
ContainerClient | Lehetővé teszi az Azure Storage-tárolók és azok blobok manipulálására. |
BlobClient | Lehetővé teszi az Azure Storage-blobok manipulálása. |
BlobServiceClient-objektum létrehozása
A BlobServiceClient objektum az SDK legfelső objektuma. Ez az ügyfél lehetővé teszi a szolgáltatás, a tárolók és a blobok manipulálására.
Miután beállította az Azure Storage-fiók identitásszerepköreit és a helyi környezetet, hozzon létre egy TypeScript-fájlt, amely tartalmazza a @azure/identity
csomagot. Hozzon létre egy hitelesítő adatot, például a DefaultAzureCredentialt a Blob Storage jelszó nélküli kapcsolatainak implementálásához. Ezzel a hitelesítő adatokkal hitelesítheti magát egy BlobServiceClient objektummal.
// connect-with-default-azure-credential.js
// You must set up RBAC for your identity with one of the following roles:
// - Storage Blob Data Reader
// - Storage Blob Data Contributor
import { DefaultAzureCredential } from '@azure/identity';
import { BlobServiceClient } from '@azure/storage-blob';
import * as dotenv from 'dotenv';
dotenv.config();
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME as string;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
async function main() {
const containerName = 'my-container';
const blobName = 'my-blob';
const timestamp = Date.now();
const fileName = `my-new-file-${timestamp}.txt`;
// create container client
const containerClient = await blobServiceClient.getContainerClient(
containerName
);
// create blob client
const blobClient = await containerClient.getBlockBlobClient(blobName);
// download file
const downloadResult = await blobClient.downloadToFile(fileName);
if (downloadResult.errorCode) throw Error(downloadResult.errorCode);
console.log(
`${fileName} downloaded ${downloadResult.contentType}, isCurrentVersion: ${downloadResult.isCurrentVersion}`
);
}
main()
.then(() => console.log(`success`))
.catch((err: unknown) => {
if (err instanceof Error) {
console.log(err.message);
}
});
A dotenv
csomag segítségével beolvassa a tárfiók nevét egy .env
fájlból. Ezt a fájlt nem szabad beadni a forrásvezérlőbe. Ha a DefaultAzureCredential beállítás részeként helyi szolgáltatásnevet használ, a hitelesítő adatok biztonsági adatai is bekerülnek a .env
fájlba.
Ha az alkalmazást az Azure-on kívül futó kiszolgálókon és ügyfeleken szeretné üzembe helyezni, hozzon létre egy olyan hitelesítő adatot , amely megfelel az igényeinek.
ContainerClient-objektum létrehozása
A ContainerClient objektumot a BlobServiceClientből vagy közvetlenül is létrehozhatja.
ContainerClient-objektum létrehozása a BlobServiceClientből
Hozza létre a ContainerClient objektumot a BlobServiceClientből.
// Azure Storage dependency
import {
BlobServiceClient,
StorageSharedKeyCredential
} from '@azure/storage-blob';
// For development environment - include environment variables from .env
import * as dotenv from 'dotenv';
dotenv.config();
// Azure Storage resource name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME as string;
if (!accountName) throw Error('Azure Storage accountName not found');
// Azure Storage resource key
const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY as string;
if (!accountKey) throw Error('Azure Storage accountKey not found');
// Create credential
const sharedKeyCredential = new StorageSharedKeyCredential(
accountName,
accountKey
);
const baseUrl = `https://${accountName}.blob.core.windows.net`;
const containerName = `my-container`;
// Create BlobServiceClient
const blobServiceClient = new BlobServiceClient(
`${baseUrl}`,
sharedKeyCredential
);
async function main(): Promise<void> {
try {
// Create container client
const containerClient = await blobServiceClient.getContainerClient(
containerName
);
// do something with containerClient...
let i = 1;
// List blobs in container
for await (const blob of containerClient.listBlobsFlat({
includeMetadata: true,
includeSnapshots: false,
includeTags: true,
includeVersions: false,
prefix: ''
})) {
console.log(`Blob ${i++}: ${blob.name}`);
}
} catch (err) {
console.log(err);
throw err;
}
}
main()
.then(() => console.log(`success`))
.catch((err: unknown) => {
if (err instanceof Error) {
console.log(err.message);
}
});
ContainerClient létrehozása közvetlenül
// Azure Storage dependency
import { ContainerClient } from '@azure/storage-blob';
// Azure authentication for credential dependency
import { DefaultAzureCredential } from '@azure/identity';
// For development environment - include environment variables from .env
import * as dotenv from 'dotenv';
dotenv.config();
// Azure Storage resource name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME as string;
if (!accountName) throw Error('Azure Storage accountName not found');
// Azure SDK needs base URL
const baseUrl = `https://${accountName}.blob.core.windows.net`;
// Unique container name
const timeStamp = Date.now();
const containerName = `my-container`;
async function main(): Promise<void> {
try {
// create container client from DefaultAzureCredential
const containerClient = new ContainerClient(
`${baseUrl}/${containerName}`,
new DefaultAzureCredential()
);
// do something with containerClient...
let i = 1;
// List blobs in container
for await (const blob of containerClient.listBlobsFlat({
includeMetadata: true,
includeSnapshots: false,
includeTags: true,
includeVersions: false,
prefix: ''
})) {
console.log(`Blob ${i++}: ${blob.name}`);
}
} catch (err) {
console.log(err);
throw err;
}
}
main()
.then(() => console.log(`success`))
.catch((err: unknown) => {
if (err instanceof Error) {
console.log(err.message);
}
});
A dotenv
csomag segítségével beolvassa a tárfiók nevét egy .env
fájlból. Ezt a fájlt nem szabad beadni a forrásvezérlőbe.
BlobClient-objektum létrehozása
Az alábbiakban felsorolt BlobClient-objektumok bármelyikét létrehozhatja egy ContainerClientből vagy közvetlenül.
Blobügyfelek listája:
BlobClient-objektum létrehozása a ContainerClientből
// Azure Storage dependency
import {
BlobClient,
BlobDownloadHeaders,
BlobGetPropertiesHeaders,
BlobGetPropertiesResponse,
BlockBlobClient,
ContainerClient
} from '@azure/storage-blob';
// For development environment - include environment variables from .env
import * as dotenv from 'dotenv';
import { getContainerClientFromDefaultAzureCredential } from './auth-get-client';
dotenv.config();
const containerName = `my-container`;
const containerClient: ContainerClient =
getContainerClientFromDefaultAzureCredential(containerName);
const blobName = `my-blob`;
async function main(containerClient: ContainerClient): Promise<void> {
// Create BlobClient object
const blobClient: BlobClient = containerClient.getBlobClient(blobName);
// do something with blobClient...
const properties: BlobGetPropertiesHeaders = await blobClient.getProperties();
if (properties.errorCode) throw Error(properties.errorCode);
console.log(`Blob ${blobName} properties:`);
// get BlockBlobClient from blobClient
const blockBlobClient: BlockBlobClient = blobClient.getBlockBlobClient();
// do something with blockBlobClient...
const downloadResponse: BlobDownloadHeaders = await blockBlobClient.download(
0
);
if (downloadResponse.errorCode) throw Error(downloadResponse.errorCode);
}
main(containerClient)
.then(() => console.log(`success`))
.catch((err: unknown) => {
if (err instanceof Error) {
console.log(err.message);
}
});
BlobClient létrehozása közvetlenül
// Azure Storage dependency
import {
BlockBlobClient,
BlockBlobUploadHeaders,
BlockBlobUploadResponse
} from '@azure/storage-blob';
import { getBlockBlobClientFromDefaultAzureCredential } from './auth-get-client';
// For development environment - include environment variables from .env
import * as dotenv from 'dotenv';
dotenv.config();
// Container must exist prior to running this script
const containerName = `my-container`;
// Random blob name and contents
const timeStamp = Date.now();
const blobName = `${timeStamp}-my-blob.txt`;
const fileContentsAsString = 'Hello there.';
const blockBlobClient: BlockBlobClient =
getBlockBlobClientFromDefaultAzureCredential(containerName, blobName);
async function main(
blockBlobClient: BlockBlobClient
): Promise<BlockBlobUploadHeaders> {
// Get file url - available before contents are uploaded
console.log(`blob.url: ${blockBlobClient.url}`);
// Upload file contents
const result: BlockBlobUploadHeaders = await blockBlobClient.upload(
fileContentsAsString,
fileContentsAsString.length
);
if (result.errorCode) throw Error(result.errorCode);
// Get results
return result;
}
main(blockBlobClient)
.then((result) => {
console.log(result);
console.log(`success`);
})
.catch((err: unknown) => {
if (err instanceof Error) {
console.log(err.message);
}
});
/*
Response looks like this:
{
etag: '"0x8DAD247F1F4896E"',
lastModified: 2022-11-29T20:26:07.000Z,
contentMD5: <Buffer 9d 6a 29 63 87 20 77 db 67 4a 27 a3 9c 49 2e 61>,
clientRequestId: 'a07fdd1f-5937-44c7-984f-0699a48a05c0',
requestId: '3580e726-201e-0045-1a30-0474f6000000',
version: '2021-04-10',
date: 2022-11-29T20:26:06.000Z,
isServerEncrypted: true,
'content-length': '0',
server: 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0',
'x-ms-content-crc64': 'BLv7vb1ONT8=',
body: undefined
}
*/
A dotenv
csomag segítségével beolvassa a tárfiók nevét egy .env
fájlból. Ezt a fájlt nem szabad beadni a forrásvezérlőbe.