Sdílet prostřednictvím


Výpis objektů blob pomocí TypeScriptu

Tento článek ukazuje, jak vypsat objekty blob pomocí klientské knihovny Azure Storage pro JavaScript.

Požadavky

  • Příklady v tomto článku předpokládají, že už máte projekt nastavený tak, aby fungoval s klientskou knihovnou Azure Blob Storage pro JavaScript. Další informace o nastavení projektu, včetně instalace balíčku, importu modulů a vytvoření autorizovaného klientského objektu pro práci s datovými prostředky, najdete v tématu Začínáme se službou Azure Blob Storage a JavaScriptem.
  • Autorizační mechanismus musí mít oprávnění k výpisu objektů blob. Další informace najdete v pokynech k autorizaci pro následující operaci rozhraní REST API:

Informace o možnostech výpisu objektů blob

Když vypíšete objekty blob z kódu, můžete určit řadu možností, jak se budou výsledky vracet ze služby Azure Storage. Můžete zadat počet výsledků, které se mají vrátit v každé sadě výsledků, a pak načíst následující sady. Můžete zadat předponu pro vrácení objektů blob, jejichž názvy začínají tímto znakem nebo řetězcem. Objekty blob můžete vypsat v ploché struktuře výpisu nebo hierarchicky. Hierarchický výpis vrací objekty blob, jako by byly uspořádány do složek.

Pokud chcete vypsat objekty blob v účtu úložiště, vytvořte ContainerClient a pak zavolejte jednu z těchto metod:

Související funkce najdete v následujících metodách:

Správa počtu vrácených výsledků

Ve výchozím nastavení vrátí operace výpisu najednou až 5 000 výsledků, ale můžete zadat počet výsledků, které má každá operace výpisu vrátit. Příklady uvedené v tomto článku ukazují, jak vrátit výsledky na stránkách. Další informace o konceptech stránkování najdete v tématu Stránkování pomocí sady Azure SDK pro JavaScript.

Filtrování výsledků pomocí předpony

Chcete-li filtrovat seznam objektů blob, zadejte řetězec pro prefix vlastnost v ContainerListBlobsOptions. Řetězec předpony může obsahovat jeden nebo více znaků. Azure Storage pak vrátí pouze objekty blob, jejichž názvy začínají danou předponou.

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
};

Vrácení metadat

Metadata objektů blob můžete vrátit s výsledky zadáním includeMetadata vlastnosti v možnostech seznamu.

Plochý výpis versus hierarchický výpis

Objekty blob ve službě Azure Storage jsou uspořádané do plochého paradigmatu místo hierarchického paradigmatu (jako je klasický systém souborů). Objekty blob ale můžete uspořádat do virtuálních adresářů , abyste napodobili strukturu složek. Virtuální adresář tvoří část názvu objektu blob a je označen znakem oddělovače.

Pokud chcete objekty blob uspořádat do virtuálních adresářů, použijte v názvu objektu blob znak oddělovače. Výchozí znak oddělovače je lomítko (/), ale jako oddělovač můžete zadat libovolný znak.

Pokud objekty blob pojmenujete pomocí oddělovače, můžete se rozhodnout, jestli chcete objekty blob vypsat hierarchicky. Pro hierarchickou operaci výpisu vrátí Azure Storage všechny virtuální adresáře a objekty blob pod nadřazeným objektem. Operaci výpisu můžete volat rekurzivně a procházet hierarchii podobně jako při procházení klasického systému souborů prostřednictvím kódu programu.

Použití plochého výpisu

Operace výpisu ve výchozím nastavení vrací objekty blob v plochém výpisu. V plochém výpisu nejsou objekty blob uspořádané podle virtuálního adresáře.

Následující příklad uvádí objekty blob v zadaném kontejneru pomocí plochého výpisu.

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}`);
  }
}

Ukázkový výstup je podobný následujícímu:

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

Poznámka:

Zobrazený ukázkový výstup předpokládá, že máte účet úložiště s plochým oborem názvů. Pokud jste pro svůj účet úložiště povolili funkci hierarchického oboru názvů, adresáře nejsou virtuální. Místo toho jsou betonové, nezávislé objekty. V důsledku toho se adresáře v seznamu zobrazují jako objekty blob nulové délky.

Alternativní možnost výpisu při práci s hierarchickým oborem názvů najdete v tématu Výpis obsahu adresáře (Azure Data Lake Storage Gen2).

Použití hierarchického výpisu

Při volání operace výpisu hierarchicky vrátí Azure Storage virtuální adresáře a objekty blob na první úrovni hierarchie.

Pokud chcete zobrazit seznam objektů blob hierarchicky, zavolejte metodu BlobContainerClient.listBlobsByHierarchy .

Následující příklad uvádí objekty blob v zadaném kontejneru pomocí hierarchického výpisu se zadanou volitelnou velikostí segmentu a zapíše název objektu blob do okna konzoly.

// 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}`);
    }
  }
}

Ukázkový výstup je podobný následujícímu:

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

Poznámka:

Snímky objektů blob nelze uvést v hierarchické operaci výpisu.

Zdroje informací

Další informace o tom, jak vypsat objekty blob pomocí klientské knihovny služby Azure Blob Storage pro JavaScript, najdete v následujících zdrojích informací.

Operace rozhraní REST API

Sada Azure SDK pro JavaScript obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat JavaScriptu. Metody klientské knihovny pro výpis objektů blob používají následující operaci rozhraní REST API:

Ukázky kódu

Prostředky klientské knihovny

Viz také