1
votes

Comment supprimer un objet blob d'un conteneur de stockage d'objets blob Azure privé

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


2 commentaires

Vous êtes-vous assuré que vos options de connexion utilisant azure.createBlobService () sont correctes, pourquoi ne pas essayer d'interroger my-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


3 Réponses :


0
votes

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()


1 commentaires

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.



1
votes

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

  1. créer sp
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()

  }


  1. créer un fichier .env
npm install @azure/identity
npm install @azure/storage-blob
  1. installer le package
AZURE_TENANT_ID=<tenant id>
AZURE_CLIENT_ID=<app id>
AZURE_CLIENT_SECRET=<password>
  1. code
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


0 commentaires

0
votes

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.


1 commentaires

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.