Blobok listázása JavaScripttel

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 blobok listázási 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ára. 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.

Ha egy tárolóban lévő blobokat egy egyszerű listaelem használatával szeretné listázni, hívja meg a következő metódust:

Ha hierarchikus lista használatával szeretné listázni a tárolóban lévő blobokat, hívja meg a következő metódust:

A visszaadott találatok számának kezelése

Alapértelmezés szerint egy listázási művelet egyszerre legfeljebb 5000 eredményt ad vissza, de megadhatja, hogy az egyes listázási műveletek hány eredményt adjanak vissza. A cikkben szereplő példák bemutatják, hogyan lehet az eredményeket lapokra bontva visszaadni. A lapozási fogalmakkal kapcsolatos további információkért lásd : 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 csak azokat a foltokat adja vissza, amelyek neve ezzel az előtaggal kezdődik. Az előtag sztringjének sample- átadása például csak azokat a blobokat adja vissza, amelyeknek a neve a következővel sample-kezdődik: .

Blob metaadatainak vagy egyéb információknak a belefoglalása

Ha bele szeretné foglalni a blobmetaadatokat az eredményekbe, állítsa a(z) includeMetadata tulajdonságot true értékre a(z) ContainerListBlobsOptions részeként. A megfelelő tulajdonság beállításával pillanatképeket, címkéket vagy verziókat is felvehet az eredményekbe true.

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). Ugyanakkor a foltokat virtuális könyvtárakba rendezheted, hogy utánozzanak egy mappászerkezetet. 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 a foltokat egy elválasztóval nevezed el, hierarchikusan sorolhatod fel a foltokat. 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 blobokat nem a virtuális címtár rendezi.

A következő példa a megadott konténerben lévő foltokat sorolja fel egy lapos listázással. Ez a példa blob-pillanatképeket és blob metaadatokat tartalmaz, ha léteznek:

async function listBlobsFlat(containerClient) {

  const maxPageSize = 2;

  // Some options for filtering results
  const listOptions = {
    includeMetadata: true,
    includeSnapshots: true,
    prefix: '' // Filter results by blob name prefix
  };

  console.log("Blobs flat list (by page):");
  for await (const response of containerClient
    .listBlobsFlat(listOptions)
    .byPage({ maxPageSize })) {
    console.log("- Page:");
    if (response.segment.blobItems) {
      for (const blob of response.segment.blobItems) {
        console.log(`  - ${blob.name}`);
      }
    }
  }
}

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

Blobs flat list (by page):
- Page:
  - a1
  - a2
- Page:
  - folder1/b1
  - folder1/b2
- Page:
  - folder2/sub1/c
  - folder2/sub1/d

Megjegyzés

A megjelenített mintakimenet feltételezi, hogy egy egyszerű névtérrel rendelkező tárfiókkal rendelkezik. Ha bekapcsolod a hierarchikus névtér funkciót a tárolófiókodhoz, a könyvtárak nem virtuálisak. Ehelyett konkrét, független tárgyak. 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ártartalom listázása (Azure Data Lake Storage) 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 használja a következő módszert:

Az alábbi példa a megadott tárolóban lévő blobokat sorolja fel hierarchikus listaelem használatával. Ebben a példában az előtag paramétere kezdetben üres sztringre van állítva a tároló összes blobjának listázásához. A példa ezután rekurzívan meghívja a listázási műveletet a virtuális címtár hierarchiájának és a listabloboknak a bejárásához.

// Recursively list virtual folders and blobs
async function listBlobHierarchical(containerClient, delimiter='/') {
  
  const maxPageSize = 20;

  // Some options for filtering list
  const listOptions = {
    prefix: '' // Filter results by blob name prefix   
  };

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

  for await (const response of containerClient
    .listBlobsByHierarchy(delimiter, 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 delimiter from current and next
        await listBlobHierarchical(containerClient, `${delimiter}${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

Megjegyzés

A blob pillanatképek nem lehetnek felsorolva hierarchikus listázási műveletben.

Foltok listázása Apache Arrow formátumban (előzetes)

Important

A foltok Apache Arrow formátumban történő listázása jelenleg az ELŐNÉZETben van. Ehhez a forgatókönyvhöz JavaScripthez szükséges a Azure Blob Storage klienskönyvtárának béta (előnézetes) verziója (például @azure/storage-blob12.34.0-beta.1 vagy újabb előzetes kiadás). Az előzetes verziójú funkciók szolgáltatásszintű szerződés nélkül érhetők el, és éles számítási feladatokhoz nem ajánlottak. Lehet, hogy bizonyos funkciók nem támogatottak, vagy korlátozott képességekkel rendelkeznek. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verzióhoz.

Ez a képesség a meglévő List Blobs API-ra épül. Az alapértelmezett XML helyett a kompakt, oszlopos Apache Arrow formátumot használja válaszformátumként a vezetéken. Engedélyezed, ha egyetlen opciót állítsz be a konténerlistázási híváson. A JavaScript SDK a háttérben dekódolja az Apache Arrow-t, és továbbra is ugyanazokat a blob item objektumokat adja vissza. Ez a megközelítés javítja a listázás áteresztőképességét, és csökkenti az ügyféloldali CPU-t nagy konténerek felsorolásakor. Megőrzi azt a válaszszerződést, amelyre a jelentkezések támaszkodnak.

Warning

A blobok listázása Apache Arrow formátumban nem támogatott olyan tárolófiókokon, amelyeknek hierarchikus névtér (Azure Data Lake Storage) van engedélyezve.

Az Apache Arrow formátumú eredmények kéréséhez állítsuk be responseFormat a listázási opciók tulajdonságát , StorageResponseFormat.Arrowmajd továbbítsuk az opciókat a ContainerClient.listBlobsFlat nevű szervernek. Importáljuk az StorageResponseFormat enumot a -ről @azure/storage-blob.

Az alábbi példa felsorolja a konténerben lévő foltokat, és az eredményeket Apache Arrow formátumban kéri:

const { StorageResponseFormat } = require("@azure/storage-blob");

const options = {
  prefix: "FolderA/",
  responseFormat: StorageResponseFormat.Arrow,
};

for await (const blob of containerClient.listBlobsFlat(options)) {
  console.log("Blob name: " + blob.name);
}

Források

Ha többet szeretne megtudni arról, hogyan lehet a blobokat a JavaScript Azure Blob Storage kliens könyvtárának használatával listázni, tekintse meg az alábbi forrásokat.

Kódminták

REST API-műveletek

Az Azure SDK for JavaScript könyvtárakat tartalmaz, amelyek az Azure REST API-ra épülnek. Ezeknek a könyvtáraknak a használatával a REST API műveleteket ismerős JavaScript paradigmákon keresztül lehet kezelni. A blobok felsorolására szolgáló ügyfélkódtár-metódusok a következő REST API-műveletet használják:

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

Lásd még