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


Blob másolása aszinkron ütemezéssel a TypeScript használatával

Ez a cikk bemutatja, hogyan másolhat egy blobot aszinkron ütemezéssel a JavaScripthez készült Azure Storage-ügyfélkódtár használatával. Egy blobot másolhat egy forrásból ugyanabban a tárfiókban, egy másik tárfiókban lévő forrásból, vagy bármely akadálymentes objektumból, amely egy adott URL-címen http GET kéréssel kérhető le. A függőben lévő másolási műveletet is megszakíthatja.

A cikkben tárgyalt ügyfélkódtár-metódusok a Blob REST API másolása műveletet használják, és akkor használhatók, ha aszinkron ütemezéssel szeretne másolatot készíteni. A legtöbb olyan másolási forgatókönyv esetében, ahol adatokat szeretne áthelyezni egy tárfiókba, és rendelkezik a forrásobjektum URL-címével, olvassa el a Blob másolása forrásobjektum URL-címéről TypeScripttel című témakört.

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 többet szeretne 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 TypeScript használatának első lépéseit.
  • Az engedélyezési mechanizmusnak rendelkeznie kell a másolási művelet végrehajtásához vagy a függőben lévő másolat megszakítá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:

Blobok aszinkron ütemezéssel történő másolása

A Copy Blob művelet aszinkron módon fejeződhet be, és a legjobb munkamennyiség alapján hajtható végre, ami azt jelenti, hogy a művelet nem garantáltan azonnal indul el vagy fejeződik be egy megadott időkereten belül. A másolási művelet a háttérben van ütemezve, és a kiszolgáló rendelkezésre álló erőforrásokkal rendelkezik. A művelet szinkron módon is befejeződhet, ha a másolat ugyanabban a tárfiókban történik.

A Copy Blob művelet a következő műveletek bármelyikét hajthatja végre:

  • Másolja a forrásblobot egy másik nevű célblobba. A célblob lehet ugyanahhoz a blobtípushoz tartozó meglévő blob (blokk, hozzáfűzés vagy oldal), vagy lehet a másolási művelet által létrehozott új blob.
  • Másolja a forrásblobot egy célblobba ugyanazzal a névvel, amely a célblobot helyettesíti. Ez a másolási művelet eltávolítja a nem véglegesített blokkokat, és felülírja a cél blob metaadatait.
  • Másolja a forrásfájlt az Azure File service-ben egy célblobba. A célblob lehet meglévő blokkblob, vagy a másolási művelet által létrehozott új blokkblob. A fájlokról lapblobok vagy hozzáfűző blobok másolása nem támogatott.
  • Pillanatkép másolása az alapblobra. Ha előléptet egy pillanatképet az alapblob helyére, visszaállíthatja a blob egy korábbi verzióját.
  • Pillanatkép másolása másik nevű célblobba. Az eredményként kapott célblob egy írható blob, és nem pillanatkép.

Ha többet szeretne megtudni a műveletről, beleértve a Copy Blob tulajdonságokra, indexcímkékre, metaadatokra és számlázásra vonatkozó információkat, olvassa el a Blob-megjegyzések másolása című témakört.

Blob másolása aszinkron ütemezéssel

Ez a szakasz áttekintést nyújt a JavaScripthez készült Azure Storage-ügyfélkódtár és a TypeScript által a másolási művelet aszinkron ütemezéssel történő végrehajtásához.

A következő metódusok burkolják a Blob REST API másolása műveletet, és elindítják az adatok aszinkron másolatát a forrásblobból:

A beginCopyFromURL metódus egy hosszú ideig futó műveletet ad vissza, amely lehetővé teszi, hogy határozatlan ideig várjon, amíg a másolat befejeződik.

Blob másolása egy Azure-beli forrásból

Ha egy blobot másol ugyanabban a tárfiókban, a művelet szinkron módon is befejeződhet. A forrásblobhoz való hozzáférés a Microsoft Entra-azonosítón, a közös hozzáférésű jogosultságkódon (SAS) vagy egy fiókkulcson keresztül engedélyezhető. Váltakozó szinkron másolási művelet esetén lásd : Blob másolása egy forrásobjektum URL-címéről TypeScript használatával.

Ha a másolási forrás egy másik tárfiókban lévő blob, a művelet aszinkron módon fejeződhet be. A forrásblobnak nyilvánosnak vagy SAS-jogkivonaton keresztül engedélyezettnek kell lennie. Az SAS-jogkivonatnak tartalmaznia kell az olvasási ('r') engedélyt. Az SAS-jogkivonatokról további információt a Megosztott hozzáférésű jogosultságkódokkal rendelkező hozzáférés delegálása című témakörben talál.

Az alábbi példa egy másik tárfiókból származó forrásblob aszinkron ütemezéssel történő másolásának forgatókönyvét mutatja be. Ebben a példában létrehozunk egy forrás blob URL-címet egy hozzáfűzött felhasználódelegálási SAS-jogkivonattal. A példa bemutatja, hogyan hozhatja létre az SAS-jogkivonatot az ügyfélkódtár használatával, de sajátot is megadhat. A példa azt is bemutatja, hogyan adhatja bérbe a forrásblobot a másolási művelet során, hogy megakadályozza a blob módosítását egy másik ügyféltől. A Copy Blob művelet a másolási művelet indításakor menti ETag a forrásblob értékét. Ha az ETag érték a másolási művelet befejeződése előtt módosul, a művelet meghiúsul.

async function copyAcrossStorageAccountsAsync(
  sourceBlob: BlockBlobClient,
  destinationBlob: BlockBlobClient,
  blobServiceClient: BlobServiceClient
): Promise<void> {
  const sourceBlobLease = new BlobLeaseClient(sourceBlob);

  // Create a SAS token that's valid for 1 hour
  const sasToken = await generateUserDelegationSAS(sourceBlob, blobServiceClient);
  const sourceBlobSASURL: string = sourceBlob.url + '?' + sasToken;

  try {
    await sourceBlobLease.acquireLease(-1);

    const copyPoller = await destinationBlob.beginCopyFromURL(sourceBlobSASURL);
    await copyPoller.pollUntilDone();
  } catch (error) {
    console.log(error);
  } finally {
    await sourceBlobLease.releaseLease();
  }
}

async function generateUserDelegationSAS(
  sourceBlob: BlockBlobClient,
  blobServiceClient: BlobServiceClient
): Promise<string> {
  // Get a user delegation key for the Blob service that's valid for 1 hour, as an example
  const delegationKeyStart = new Date();
  const delegationKeyExpiry = new Date(Date.now() + 3600000);
  const userDelegationKey = await blobServiceClient.getUserDelegationKey(
    delegationKeyStart,
    delegationKeyExpiry
  );

  // Create a SAS token that's valid for 1 hour, as an example
  const sasTokenStart = new Date();
  const sasTokenExpiry = new Date(Date.now() + 3600000);
  const blobName = sourceBlob.name;
  const containerName = sourceBlob.containerName;
  const sasOptions = {
    blobName,
    containerName,
    permissions: BlobSASPermissions.parse("r"),
    startsOn: sasTokenStart,
    expiresOn: sasTokenExpiry,
    protocol: SASProtocol.HttpsAndHttp
  };

  const sasToken = generateBlobSASQueryParameters(
    sasOptions,
    userDelegationKey,
    blobServiceClient.accountName
  ).toString();

  return sasToken.toString();
}

Feljegyzés

A felhasználói delegálási SAS-jogkivonatok nagyobb biztonságot nyújtanak, mivel fiókkulcs helyett Microsoft Entra hitelesítő adatokkal vannak aláírva. Felhasználói delegálási SAS-jogkivonat létrehozásához a Microsoft Entra biztonsági tagnak megfelelő engedélyekre van szüksége. Az engedélyezési követelményekkel kapcsolatban lásd: Felhasználódelegálási kulcs lekérése.

Blob másolása az Azure-on kívüli forrásból

Másolási műveletet bármely olyan forrásobjektumon végrehajthat, amely http GET kéréssel kérhető le egy adott URL-címen, beleértve az Azure-on kívüli akadálymentes objektumokat is. Az alábbi példa egy blob akadálymentes forrásobjektum URL-címéről történő másolásának forgatókönyvét mutatja be.

async function copyFromExternalSource(sourceURL: string,
  destinationBlob: BlockBlobClient
): Promise<void> {
  try {
    const copyPoller = await destinationBlob.beginCopyFromURL(sourceURL);
    await copyPoller.pollUntilDone();
  } catch (error) {
    console.log(error);
  }
}

Másolási művelet állapotának ellenőrzése

Az aszinkron Copy Blob művelet állapotának ellenőrzéséhez lekérdezheti a getProperties metódust , és ellenőrizheti a másolás állapotát.

Az alábbi példakód bemutatja, hogyan ellenőrizheti a függőben lévő másolási művelet állapotát:

async function checkCopyStatus(destinationBlob: BlockBlobClient): Promise<void> {
  const properties = await destinationBlob.getProperties();
  console.log(properties.copyStatus);
}

Másolási művelet megszakítása

A függőben lévő Copy Blob művelet megszakítása nulla hosszúságú célblobot eredményez. A célblob metaadatai azonban a forrásblobból másolt vagy explicit módon beállított új értékeket tartalmaznak a másolási művelet során. Az eredeti metaadatok másolás előtti megőrzéséhez készítsen pillanatképet a célblobról, mielőtt meghívja az egyik másolási metódust.

Függőben lévő másolási művelet megszakításához hívja meg a következő műveletet:

Ez a metódus körbefuttatja a Blob REST API megszakítása műveletet, amely megszakít egy függőben lévő Copy Blob műveletet. Az alábbi példakód bemutatja, hogyan szakíthat meg függőben lévő Copy Blob műveletet:

async function abortCopy(destinationBlob: BlockBlobClient): Promise<void> {
  const properties = await destinationBlob.getProperties();

  // Check the copy status and abort if pending
  if (properties.copyStatus === "pending") {
    await destinationBlob.abortCopyFromURL(properties.copyId?.toString()!);
  }
}

Források

Ha többet szeretne megtudni a blobok aszinkron ütemezéssel történő másolásáról a JavaScripthez és a TypeScripthez 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 és TypeScript 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 ismerős nyelvi paradigmákon keresztül. A cikkben tárgyalt ügyfélkódtár-metódusok a következő REST API-műveleteket használják:

  • Blob másolása (REST API)
  • Blob másolásának megszakítása (REST API)

Kódminták

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