J'essaie de supprimer un objet blob d'un conteneur d'objets blob privés à l'aide de la fonction deleteBlobIfExists ()
du package azure-storage
npm. Mais, lorsque la fonction est exécutée, le résultat
revient toujours sous la forme false
, ce qui signifie que le blob "n'existe pas". Mais le blob existe. Je suppose simplement qu'il ne peut pas trouver l'objet blob car l'accès du conteneur est défini sur "privé". Aide?
const blobService = azure.createBlobService(); blobService.deleteBlobIfExists("my-blob-container", "my-blob", (err, result) => { if(err) { console.log(err); } });
3 Réponses :
Je confirme ce que dit Jim Xu - ajoutez votre chaîne de connexion lors de l'appel de
const CONNECT_STR = process.env.CONNECT_STR; console.log('\nDeleting blob...'); // Delete blob const blobService = azure.createBlobService(CONNECT_STR); blobService.deleteBlobIfExists(containerName, blobName, (err, result) => { if(err) { console.log(err); } }); console.log("Blob was deleted successfully.");
et il supprime le blob avec succès. J'ai essayé avec l'exemple de code de démarrage rapide et j'ai réussi à supprimer un objet blob dans un conteneur privé.
azure.createBlobService()
La documentation indique que createBlobService
"Crée un nouvel objet {@link BlobService}. Si aucun compte de stockage ou clé d'accès au stockage n'est fourni, les variables d'environnement AZURE_STORAGE_CONNECTION_STRING, puis les variables d'environnement AZURE_STORAGE_ACCOUNT et AZURE_STORAGE_ACCESS_KEY seront utilisées." J'ai la chaîne de connexion dans mon fichier .env et je peux très bien créer le service blob.
Si le niveau d'accès de votre conteneur est privé, vous devez fournir une chaîne de connexion de stockage ou un nom de compte et une clé de compte lorsque vous utilisez azure.createBlobService ()
pour créer un client blob.
En outre, le sdk azure-storage
est Azure Storage nodejs V2. Il s'agit d'un SDK hérité. Je vous suggère d'utiliser le sdk @ azure / storage-blob
. C'est le dernier SDK. Pour savoir comment l'utiliser, veuillez vous référer aux étapes suivantes
var storage = require("@azure/storage-blob") const { DefaultAzureCredential } = require("@azure/identity"); const defaultAzureCredential = new DefaultAzureCredential(); const blobclient = new storage.BlobServiceClient("<blob url>",defaultAzureCredential) if(blobClient.exists()){ blobClient.delete() }
npm install @azure/identity npm install @azure/storage-blob
AZURE_TENANT_ID=<tenant id> AZURE_CLIENT_ID=<app id> AZURE_CLIENT_SECRET=<password>
az ad sp create-for-rbac -n <your-application-name> --skip-assignment az keyvault set-policy --name <your-key-vault-name> --spn $AZURE_CLIENT_ID --secret-permissions backup delete get list purge recover restore set
On dirait que vous avez une condition de concurrence avec Azure si vous l'appelez peu de temps après un événement de création d'objets blob.
Oui, c'est ce que c'était. J'avais écrit une méthode pour supprimer tous les objets blob que je venais d'ajouter à Azure si une autre logique de mon point de terminaison API échouait. Comme je venais à peine de créer les blobs, la méthode doesExist
renvoyait false à chaque fois. J'ai contourné cela en utilisant un setInterval () et en appelant la méthode plusieurs fois après quelques secondes.
Vous êtes-vous assuré que vos options de connexion utilisant
azure.createBlobService ()
sont correctes, pourquoi ne pas essayer d'interrogermy-blob
avec le même BlobService.Si le niveau d'accès de votre conteneur est privé, veuillez utiliser
azure.createBlobService ()
pour créer le service blob. Pour plus de détails, veuillez consulter azure.github.io/azure-storage-node /global.html