Blob másolása aszinkron ütemezéssel JavaScript vagy 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, amikor 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 JavaScripttel 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 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 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 által a másolási művelet aszinkron ütemezéssel történő végrehajtásához biztosított módszerekről.
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 JavaScripttel.
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, destinationBlob, blobServiceClient) {
// Lease the source blob to prevent changes during the copy operation
const sourceBlobLease = new BlobLeaseClient(sourceBlob);
// Create a SAS token that's valid for 1 hour
const sasToken = await generateUserDelegationSAS(sourceBlob, blobServiceClient);
const sourceBlobSASURL = sourceBlob.url + "?" + sasToken;
try {
await sourceBlobLease.acquireLease(-1);
// Start the copy operation and wait for it to complete
const copyPoller = await destinationBlob.beginCopyFromURL(sourceBlobSASURL);
await copyPoller.pollUntilDone();
} catch (error) {
// Handle the exception
} finally {
// Release the lease once the copy operation completes
await sourceBlobLease.releaseLease();
}
}
async function generateUserDelegationSAS(sourceBlob, blobServiceClient) {
// 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, destinationBlob) {
const copyPoller = await destinationBlob.beginCopyFromURL(sourceURL);
await copyPoller.pollUntilDone();
}
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) {
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) {
const properties = await destinationBlob.getProperties();
// Check the copy status and abort if pending
if (properties.copyStatus === "pending") {
await destinationBlob.abortCopyFromURL(properties.copyId);
}
}
Források
Ha többet szeretne megtudni a blobok aszinkron ütemezéssel történő másolásáról a JavaScripthez készült Azure Blob Storage ügyfélkódtár használatával, tekintse meg az alábbi erőforrásokat.
Kódminták
- JavaScript- és TypeScript-kódminták megtekintése ebből a cikkből (GitHub)
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 cikkben tárgyalt ügyfélkódtár-metódusok a következő REST API-műveleteket használják:
Ügyfélkódtár erőforrásai
Kapcsolódó tartalom
- Ez a cikk a JavaScript/TypeScript Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a JavaScript/TypeScript-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.