这是该问题的后续问题:
How to delete a blob using Azure Functions?
当Blob触发我的Azure函数时,一旦完成处理,我需要将其删除。否则,我最终将在容器中出现许多斑点。
当我运行以下代码时:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connection);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("process");
var blockBlob = container.GetBlockBlobReference($"process/in/{name}"); // ==> This was the problem. See the answer for more info.
bool deleted = blockBlob.DeleteIfExists();
方法blockBlob.DeleteIfExists()
始终返回false,并且永远不会删除该blob。
我的猜测是,由于blob刚刚触发了它,因此它以某种方式被函数执行锁定。
[更新1]
...
[更新2]
非常感谢@Jerry Liu,该问题与Azure Fundctions无关。
诀窍在于,blockBlob.DeleteIfExists()
在呼叫者错误地发送错误路径时返回false。
更好的方法可能是使用“ blockBlob.Delete”并找出实际的问题是什么。
有关更多信息,请参见DeleteIfExists源代码。
另一个相关问题: Azure CloudBlockBlob.DeleteIfExists() - Does false always mean the blob doesn't exist?
答案 0 :(得分:1)
问题位于此行
var blockBlob = container.GetBlockBlobReference($"process/in/{name}");
blob名称应为$"in/{name}"
,因为我们根据GetBlockBlobReference
中已有的特定容器调用GetContainerReference
。
重复导致Storage无法找到Blob。我们可能对没有相关的提示/异常感到困惑,因为DeleteIfExists
在blob不存在时也会返回false。