Megosztás a következőn keresztül:


Blobok listázása TypeScript használatával

Ez a cikk bemutatja, hogyan listázhatja a blobokat a JavaScripthez készült Azure Storage ügyfélkódtár használatával.

Előfeltételek

  • A cikkben szereplő példák feltételezik, hogy már rendelkezik egy projekttel, amely a JavaScripthez készült Azure Blob Storage ügyfélkódtárral dolgozik. Ha szeretne többet megtudni a projekt beállításáról, beleértve a csomagtelepítést, a modulok importálását és egy engedélyezett ügyfélobjektum létrehozását az adaterőforrások használatához, olvassa el az Azure Blob Storage és a JavaScript használatának első lépéseit.
  • Az engedélyezési mechanizmusnak rendelkeznie kell a blobok listázásához szükséges engedélyekkel. További információkért tekintse meg az alábbi REST API-művelet engedélyezési útmutatóját:

Tudnivalók a bloblista beállításairól

Ha blobokat listáz a kódból, több lehetőséget is megadhat az eredmények Azure Storage-ból való visszaadásának kezelésére. Megadhatja az egyes találathalmazokban visszaadandó eredmények számát, majd lekérheti a következő halmazokat. Megadhat egy előtagot, amely visszaadja azokat a blobokat, amelyeknek a neve ezzel a karakterrel vagy sztringgel kezdődik. A blobokat egy lapos listaszerkezetben vagy hierarchikusan is listázhatja. A hierarchikus lista a blobokat úgy adja vissza, mintha mappákba rendezték volna őket.

A tárfiókban lévő blobok listázásához hozzon létre egy ContainerClientet , majd hívja meg az alábbi módszerek egyikét:

A kapcsolódó funkciók a következő módszerekben találhatók:

Az eredmény visszaadott értékének kezelése

Alapértelmezés szerint egy listaelem-művelet egyszerre legfeljebb 5000 eredményt ad vissza, de megadhatja, hogy hány találatot szeretne visszaadni az egyes listaműveleteknek. A cikkben bemutatott példák bemutatják, hogyan adhat vissza eredményeket a lapokban. További információ a lapozási fogalmakról: Pagination with the Azure SDK for JavaScript

Eredmények szűrése előtaggal

A blobok listájának szűréséhez adjon meg egy sztringet a prefix ContainerListBlobsOptions tulajdonsághoz. Az előtag sztringje egy vagy több karaktert tartalmazhat. Az Azure Storage ezután csak azokat a blobokat adja vissza, amelyeknek a neve ezzel az előtaggal kezdődik.

const listOptions: ContainerListBlobsOptions = {
    includeCopy: false,                 // include metadata from previous copies
    includeDeleted: false,              // include deleted blobs 
    includeDeletedWithVersions: false,  // include deleted blobs with versions
    includeLegalHost: false,            // include legal host id  
    includeMetadata: true,              // include custom metadata
    includeSnapshots: true,             // include snapshots
    includeTags: true,                  // include indexable tags
    includeUncommittedBlobs: false,     // include uncommitted blobs
    includeVersions: false,             // include all blob version
    prefix: ''                          // filter by blob name prefix
};

Metaadatok visszaadva

A blob metaadatait az eredményekkel együtt a listabeállításokban megadott tulajdonság megadásával includeMetadata is visszaadhatja.

Egybesimított lista és hierarchikus lista

Az Azure Storage-blobok hierarchikus paradigma helyett egy lapos paradigma szerint vannak rendszerezve (például egy klasszikus fájlrendszerben). A blobokat azonban virtuális könyvtárakba rendezheti a mappastruktúra utánzásához. A virtuális címtár a blob nevének része, és a határoló karakter jelzi.

A blobok virtuális könyvtárakba rendezéséhez használjon elválasztó karaktert a blob nevében. Az alapértelmezett elválasztó karakter egy perjel (/), de bármely karaktert megadhat elválasztóként.

Ha elválasztójel használatával nevezi el a blobokat, választhatja, hogy hierarchikusan listázni szeretné a blobokat. Hierarchikus listázási művelet esetén az Azure Storage visszaadja a szülőobjektum alatti virtuális könyvtárakat és blobokat. A listázási műveletet rekurzívan hívhatja meg a hierarchia átjárásához, hasonlóan ahhoz, ahogyan egy klasszikus fájlrendszert programozott módon léptetne át.

Egyszerű lista használata

A listázási művelet alapértelmezés szerint egy egyszerű lista blobjait adja vissza. Egy egyszerű lista esetében a blobok nem virtuális címtárak szerint vannak rendszerezve.

Az alábbi példa a megadott tárolóban lévő blobokat sorolja fel egy egyszerű listaelem használatával.

async function listBlobsFlatWithPageMarker(
  containerClient: ContainerClient
): Promise<void> {
  // page size
  const maxPageSize = 2;

  let i = 1;

  // some options for filtering list
  const listOptions: ContainerListBlobsOptions = {
    includeCopy: false, // include metadata from previous copies
    includeDeleted: false, // include deleted blobs
    includeDeletedWithVersions: false, // include deleted blobs with versions
    includeLegalHold: false, // include legal hold
    includeMetadata: true, // include custom metadata
    includeSnapshots: false, // include snapshots
    includeTags: true, // include indexable tags
    includeUncommitedBlobs: false, // include uncommitted blobs
    includeVersions: false, // include all blob version
    prefix: '' // filter by blob name prefix
  };

  let iterator = containerClient
    .listBlobsFlat(listOptions)
    .byPage({ maxPageSize });
  let response = (await iterator.next()).value;

  // Prints blob names
  for (const blob of response.segment.blobItems) {
    console.log(`Flat listing: ${i++}: ${blob.name}`);
  }

  // Gets next marker
  const marker = response.continuationToken;

  // Passing next marker as continuationToken
  iterator = containerClient
    .listBlobsFlat({
      includeMetadata: true,
      includeSnapshots: false,
      includeTags: true,
      includeVersions: false,
      prefix: ''
    })
    .byPage({
      continuationToken: marker,
      maxPageSize: maxPageSize * 2
    });
  response = (await iterator.next()).value;

  // Prints next blob names
  for (const blob of response.segment.blobItems) {
    console.log(`Flat listing: ${i++}: ${blob.name}`);
  }
}

A mintakimenet a következőhöz hasonló:

Flat listing: 1: a1
Flat listing: 2: a2
Flat listing: 3: folder1/b1
Flat listing: 4: folder1/b2
Flat listing: 5: folder2/sub1/c
Flat listing: 6: folder2/sub1/d

Feljegyzés

A megjelenített mintakimenet feltételezi, hogy egy egyszerű névtérrel rendelkező tárfiókkal rendelkezik. Ha engedélyezte a tárfiók hierarchikus névtér funkcióját, a címtárak nem virtuálisak. Ehelyett konkrét, független objektumok. Ennek eredményeképpen a címtárak nulla hosszúságú blobként jelennek meg a listában.

A hierarchikus névtér használatakor alternatív listabeállítást a címtár tartalmának listázása (Azure Data Lake Storage Gen2) című témakörben talál.

Hierarchikus lista használata

Ha hierarchikusan meghív egy listázási műveletet, az Azure Storage a hierarchia első szintjén adja vissza a virtuális könyvtárakat és blobokat.

A blobok hierarchikus listázásához hívja meg a BlobContainerClient.listBlobsByHierarchy metódust .

Az alábbi példa egy hierarchikus listaelem használatával sorolja fel a megadott tárolóban lévő blobokat egy választható szegmensmérettel, és beírja a blob nevét a konzolablakba.

// Recursively list virtual folders and blobs
async function listBlobHierarchical(
  containerClient: ContainerClient,
  virtualHierarchyDelimiter = '/'
): Promise<void> {
  // page size - artificially low as example
  const maxPageSize = 2;

  // some options for filtering list
  const listOptions: ContainerListBlobsOptions = {
    includeCopy: false, // include metadata from previous copies
    includeDeleted: false, // include deleted blobs
    includeDeletedWithVersions: false, // include deleted blobs with versions
    includeLegalHold: false, // include legal hold
    includeMetadata: true, // include custom metadata
    includeSnapshots: false, // include snapshots
    includeTags: true, // include indexable tags
    includeUncommitedBlobs: false, // include uncommitted blobs
    includeVersions: false, // include all blob version
    prefix: '' // filter by blob name prefix
  };

  let i = 1;
  console.log(`Folder ${virtualHierarchyDelimiter}`);

  for await (const response of containerClient
    .listBlobsByHierarchy(virtualHierarchyDelimiter, listOptions)
    .byPage({ maxPageSize })) {
    console.log(`   Page ${i++}`);
    const segment = response.segment;

    if (segment.blobPrefixes) {
      // Do something with each virtual folder
      for await (const prefix of segment.blobPrefixes) {
        // build new virtualHierarchyDelimiter from current and next
        await listBlobHierarchical(
          containerClient,
          `${virtualHierarchyDelimiter}${prefix.name}`
        );
      }
    }

    for (const blob of response.segment.blobItems) {
      // Do something with each blob
      console.log(`\tBlobItem: name - ${blob.name}`);
    }
  }
}

A mintakimenet a következőhöz hasonló:

Folder /
   Page 1
        BlobItem: name - a1
        BlobItem: name - a2
   Page 2
Folder /folder1/
   Page 1
        BlobItem: name - folder1/b1
        BlobItem: name - folder1/b2
Folder /folder2/
   Page 1
Folder /folder2/sub1/
   Page 1
        BlobItem: name - folder2/sub1/c
        BlobItem: name - folder2/sub1/d
   Page 2
        BlobItem: name - folder2/sub1/e

Feljegyzés

A blob-pillanatképek nem szerepelhetnek hierarchikus listaelem-műveletben.

Források

Ha többet szeretne megtudni arról, hogyan listázhatja a blobokat a JavaScripthez készült Azure Blob Storage ügyfélkódtár használatával, tekintse meg az alábbi erőforrásokat.

REST API-műveletek

Az Azure SDK for JavaScript olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát ismert JavaScript-paradigmákon keresztül. A blobok felsorolására szolgáló ügyfélkódtár-metódusok a következő REST API-műveletet használják:

Kódminták

Ügyfélkódtár erőforrásai

Lásd még