繁体   English   中英

无法删除触发 Azure 函数 Blob 输入绑定的 Blob

[英]Cannot delete the blob that triggers an Azure Function Blob Input Binding

这是这个问题的后续问题:

如何使用 Azure Functions 删除 Blob?

当 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 源代码。

https://github.com/Azure/azure-storage-net/blob/master/Lib/ClassLibraryCommon/Blob/CloudBlob.cs#L1993

另一个相关问题: Azure CloudBlockBlob.DeleteIfExists() - false 是否总是意味着 blob 不存在?

问题出现在这一行

var blockBlob = container.GetBlockBlobReference($"process/in/{name}");

blob 名称应为$"in/{name}"因为我们根据已在GetContainerReference获得的特定容器调用GetBlockBlobReference

重复导致存储无法找到 blob。 我们可能会对没有相关提示/异常感到困惑,因为DeleteIfExists在 blob 不存在时也会返回 false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM