簡體   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