如何从私有Azure Blob存储容器中删除Blob

时间:2019-12-16 21:54:24

标签: node.js azure azure-blob-storage

我正在尝试使用deleteBlobIfExists() npm包中的azure-storage函数从私有Blob容器中删除Blob。但是,当函数执行时,result总是以false的形式返回,这意味着blob“不存在”。但是斑点确实存在。我只是假设它找不到该Blob,因为容器的访问权限设置为“私有”。帮助吗?

const blobService = azure.createBlobService();
blobService.deleteBlobIfExists("my-blob-container", "my-blob", (err, result) => {
   if(err) {
      console.log(err);
   }
});

3 个答案:

答案 0 :(得分:1)

如果容器的访问级别是私有的,则在使用azure.createBlobService()创建Blob客户端时,需要提供存储连接字符串或帐户名和帐户密钥。

此外,SDK azure-storage是Azure存储nodejs V2。这是旧版SDK。我建议您使用sdk @azure/storage-blob。这是最新的SDK。关于使用方法,请参考以下步骤

  1. 创建sp
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

  1. 创建.env文件
AZURE_TENANT_ID=<tenant id>
AZURE_CLIENT_ID=<app id>
AZURE_CLIENT_SECRET=<password>
  1. 安装软件包
npm install @azure/identity
npm install @azure/storage-blob
  1. 代码
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 :(得分:0)

我确认Jim Xu的意思-致电时添加您的连接字符串

azure.createBlobService()

并成功删除Blob。我尝试了快速入门示例代码,并能够成功删除私有容器中的Blob。

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.");

答案 2 :(得分:0)

如果您在创建blob事件之后不久致电Azure,则听起来像与Azure发生竞争。