Share via


Azure Blob Depolama ve JavaScript kullanmaya başlama

Bu makalede JavaScript için Azure Blob Depolama istemci kitaplığı v12'yi kullanarak Azure Blob Depolama nasıl bağlanabileceğiniz gösterilmektedir. Bağlandıktan sonra kodunuz Blob Depolama hizmetinin kapsayıcıları, blobları ve özellikleri üzerinde çalışabilir.

Örnek kod parçacıkları GitHub'da çalıştırılabilir Node.js dosyaları olarak kullanılabilir.

API başvuru | Paketi (npm) | Kitaplık kaynak kodu | Örnekleri | Geri bildirimde bulunmak

Ön koşullar

Projenizi ayarlama

  1. Bir komut istemi açın ve proje klasörünüzde değiştirin. Klasör adınızla değiştirin YOUR-DIRECTORY :

    cd YOUR-DIRECTORY
    
  2. Dizininizde henüz bir package.json dosya yoksa, dosyayı oluşturmak için projeyi başlatın:

    npm init -y
    
  3. JavaScript için Azure Blob Depolama istemci kitaplığını yükleyin:

    npm install @azure/storage-blob
    
  4. Microsoft Entra ID kullanarak parolasız bağlantılar kullanmak istiyorsanız JavaScript için Azure Identity istemci kitaplığını yükleyin:

    npm install @azure/identity
    

Erişimi yetkilendirme ve Blob Depolama bağlanma

Microsoft Entra ID, bağlantı kimliğini (yönetilen kimlik) yöneterek en güvenli bağlantıyı sağlar. Bu parolasız işlevsellik, kodda depolanan gizli dizileri (anahtarlar veya bağlantı dizesi) gerektirmeyen bir uygulama geliştirmenizi sağlar.

Azure buluta kimlik erişimini ayarlama

Azure'a parola olmadan bağlanmak için bir Azure kimliği ayarlamanız veya mevcut bir kimliği kullanmanız gerekir. Kimlik ayarlandıktan sonra, kimliğe uygun rolleri atadığınızdan emin olun.

Microsoft Entra Id ile parolasız erişimi yetkilendirmek için bir Azure kimlik bilgisi kullanmanız gerekir. İhtiyacınız olan kimlik bilgisi türü, uygulamanızın nerede çalıştığına bağlıdır. Bu tabloyu kılavuz olarak kullanın.

Ortam Yöntem
Geliştirme ortamı Visual Studio Code
Geliştirme ortamı Hizmet sorumlusu
Azure’da barındırılan uygulamalar Azure tarafından barındırılan uygulamalar kurulumu
Şirket içinde Şirket içi uygulama kurulumu

Depolama hesabı rollerini ayarlama

Depolama kaynağınızın bağlanmayı planladığınız kimlik kaynağına aşağıdaki Azure RBAC rollerinden birinin veya daha fazlasının atanmış olması gerekir. Önceki adımda oluşturduğunuz her kimlik için Azure Depolama rollerini ayarlayın: Azure bulutu, yerel geliştirme, şirket içi.

Kurulumu tamamladıktan sonra her kimliğin uygun rollerden en az birine ihtiyacı vardır:

  • Veri erişim rolü- örneğin:

    • Depolama Blob Verileri Okuyucusu
    • Depolama Blob Verileri Katkıda Bulunanı
  • Kaynak rolü:

    • Okuyucu
    • Katkıda Bulunan

Uygulamanızı derleme

Uygulamanızı oluştururken kodunuz öncelikli olarak üç tür kaynakla etkileşim kurar:

  • Azure Depolama verileriniz için benzersiz üst düzey ad alanı olan depolama hesabı.
  • Depolama hesabınızdaki blob verilerini düzenleyen kapsayıcılar.
  • Metin ve ikili veriler gibi yapılandırılmamış verileri depolayan bloblar.

Aşağıdaki diyagramda bu kaynaklar arasındaki ilişki gösterilmektedir.

Diagram of Blob storage architecture

Her kaynak türü bir veya daha fazla ilişkili JavaScript istemcisiyle temsil edilir:

Sınıf Tanım
BlobServiceClient Depolama hesabınız için Blob Depolama uç noktasını temsil eder.
ContainerClient Azure Depolama kapsayıcılarını ve bloblarını işlemenizi sağlar.
BlobClient Azure Depolama bloblarını işlemenize olanak tanır.

BlobServiceClient nesnesi oluşturma

BlobServiceClient nesnesi SDK'daki en üstteki nesnedir. Bu istemci hizmeti, kapsayıcıları ve blobları işlemenizi sağlar.

Azure depolama hesabı kimlik rolleriniz ve yerel ortamınız ayarlandıktan sonra paketi içeren @azure/identity bir JavaScript dosyası oluşturun. Blob Depolama parolasız bağlantılar uygulamak için DefaultAzureCredential gibi bir kimlik bilgisi oluşturun. BlobServiceClient nesnesiyle kimlik doğrulaması yapmak için bu kimlik bilgilerini kullanın.

// connect-with-default-azure-credential.js
const { BlobServiceClient } = require('@azure/storage-blob');
const { DefaultAzureCredential } = require('@azure/identity');
require('dotenv').config()

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
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 = 'REPLACE-WITH-EXISTING-CONTAINER-NAME';
  const blobName = 'REPLACE-WITH-EXISTING-BLOB-NAME';

  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
  await blobClient.downloadToFile(fileName);

  console.log(`${fileName} downloaded`);
  
}

main()
  .then(() => console.log(`done`))
  .catch((ex) => console.log(`error: ${ex.message}`));

Paket dotenv , depolama hesabınızın adını bir .env dosyadan okumak için kullanılır. Bu dosya kaynak denetiminde denetlenmemelidir. DefaultAzureCredential kurulumunuzun bir parçası olarak yerel bir hizmet sorumlusu kullanırsanız, bu kimlik bilgisi için tüm güvenlik bilgileri de dosyaya .env gider.

Uygulamayı Azure dışında çalışan sunuculara ve istemcilere dağıtmayı planlıyorsanız, gereksinimlerinizi karşılayan kimlik bilgilerinden birini oluşturun.

ContainerClient nesnesi oluşturma

ContainerClient nesnesini BlobServiceClient'dan veya doğrudan oluşturabilirsiniz.

BlobServiceClient'dan ContainerClient nesnesi oluşturma

BlobServiceClient'dan ContainerClient nesnesini oluşturun.

// Azure Storage dependency
const {
  StorageSharedKeyCredential,
  BlobServiceClient,
} = require("@azure/storage-blob");

// For development environment - include environment variables from .env
require("dotenv").config();

// Azure Storage resource name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error("Azure Storage accountName not found");

// Azure Storage resource key
const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY;
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() {
  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()) {
      console.log(`Blob ${i++}: ${blob.name}`);
    }
  } catch (err) {
    console.log(err);
    throw err;
  }
}

main()
  .then(() => console.log(`done`))
  .catch((ex) => console.log(ex.message));

Doğrudan ContainerClient oluşturma

// Azure Storage dependency
const {
  ContainerClient
} = require("@azure/storage-blob");

// Azure authentication for credential dependency
const { DefaultAzureCredential } = require('@azure/identity');

// For development environment - include environment variables from .env
require("dotenv").config();

// Azure Storage resource name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
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 = `test`;

async function main() {
  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()) {
        console.log(`Blob ${i++}: ${blob.name}`);
    }


  } catch (err) {
    console.log(err);
    throw err;
  }
}

main()
  .then(() => console.log(`done`))
  .catch((ex) => console.log(ex.message));

Paket dotenv , depolama hesabınızın adını bir .env dosyadan okumak için kullanılır. Bu dosya kaynak denetiminde denetlenmemelidir.

BlobClient nesnesi oluşturma

Aşağıda listelenen BlobClient nesnelerinden herhangi birini bir ContainerClient'dan veya doğrudan oluşturabilirsiniz.

Blob istemcilerinin listesi:

ContainerClient'dan BlobClient nesnesi oluşturma

// Azure Storage dependency
const {
  StorageSharedKeyCredential,
  ContainerClient
} = require("@azure/storage-blob");

// For development environment - include environment variables from .env
require("dotenv").config();

// Azure Storage resource name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error("Azure Storage accountName not found");

// Azure Storage resource key
const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY;
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`;
const blobName = `my-blob`;

// Create ContainerClient
const containerClient = new ContainerClient(
  `${baseUrl}/${containerName}`,
  sharedKeyCredential
);  

async function main() {
  try {
  
    // Create BlobClient object
    const blobClient = containerClient.getBlobClient(blobName);

    // do something with blobClient...
    const properties = await blobClient.getProperties();
    console.log(`Blob ${blobName} properties:`);

    // get BlockBlobClient from blobClient
    const blockBlobClient = blobClient.getBlockBlobClient();

    // do something with blockBlobClient...
    const downloadResponse = await blockBlobClient.download(0);

  } catch (err) {
    console.log(err);
    throw err;
  }
}

main()
  .then(() => console.log(`done`))
  .catch((ex) => console.log(ex.message));

BlobClient'u doğrudan oluşturma

// Azure Storage dependency
const { BlockBlobClient } = require("@azure/storage-blob");

// Azure authentication for credential dependency
const { DefaultAzureCredential } = require('@azure/identity');

// For development environment - include environment variables from .env
require("dotenv").config();

// Azure Storage resource name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error("Azure Storage accountName not found");

// Azure SDK needs base URL
const baseUrl = `https://${accountName}.blob.core.windows.net`;

// Container must exist prior to running this script
const containerName = `test`;

// Random blob name and contents
const timeStamp = Date.now();
const blobName = `${timeStamp}-my-blob.txt`;
const fileContentsAsString = "Hello there.";

async function main(){

  // Create a client that can authenticate with Azure Active Directory
  const client = new BlockBlobClient(
    `${baseUrl}/${containerName}/${blobName}`,
    new DefaultAzureCredential()
  );

  // Get file url - available before contents are uploaded
  console.log(`blob.url: ${client.url}`);

  // Upload file contents
  const result = await client.upload(fileContentsAsString, fileContentsAsString.length);

  // Get results
  return result;
}

main().then((result) => console.log(result)).catch((ex) => console.log(ex.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
}
*/

Paket dotenv , depolama hesabınızın adını bir .env dosyadan okumak için kullanılır. Bu dosya kaynak denetiminde denetlenmemelidir.

Ayrıca bkz.