不要覆盖 Azure Blob 存储

rah*_*wla 5 c# cloud azure blobstorage azure-blob-storage

我有一种将文件添加到 Azure Blob 存储的方法,问题是我试图指定一个条件,在该条件下它不会覆盖 blob,而只是添加到其中。我正在尝试使用参数访问条件,但是 VS 说此方法不能采用两个参数 - async void archiveNewImportedImages(List imageFiles) {

        // Saving the images
        // Retrieve reference to a blob named "myblob".


        // Create or overwrite the "myblob" blob with contents from a local file.

        using (var fileStream = System.IO.File.OpenRead(@"C:\Users\rahulchawla\Desktop\FilezilleIMGS\FilezilleIMGS\MTO_Image\CR01-1-20170623-1327.jpg"))
        {

            await blockBlob.UploadFromStreamAsync(fileStream, accessCondition: AccessCondition.GenerateIfNoneMatchCondition("*"));
        }

        // save url of the image into a variable and later to the database
        ///  fileURL = blockBlob.Uri.ToString();



    }
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

最终目标:不要覆盖容器 - 继续添加不同的文件,例如。img1.jpg、img2.jpg 转为 blob

其他详细信息:想要将图像附加到容器中(换句话说,继续将图像添加到容器中)。如果文件存在,则不想覆盖现有文件)

Gau*_*tri 3

根据设计,如果你尝试上传具有相同 Blob 名称的新内容,Azure Blob 存储将覆盖 Blob 的内容。

如果您不想覆盖内容,您可以执行某些操作,但随后您必须为其编写代码。

  1. 上传之前检查 blob 是否存在,上传操作失败,并通知用户为 blob 选择另一个名称或在代码中分配一个新名称。blob.ExistsAsync您可以通过调用或使用当前正在执行的访问条件执行操作来检查 blob 是否存在。在第一种情况下,您将得到一个真/假值,并根据该值决定要做什么。在第二种情况下,上传操作将失败,PreConditionNotMet (412 Status Code)因此您需要捕获异常并决定要做什么。
  2. 如果您的目的是保留所有更改的历史记录,那么您应该查看blob snapshotAzure Blob 存储中提供的功能。当您拍摄 Blob 的快照时,它会创建该 Blob 的只读副本。但请记住,在这种情况下,只会有一个 blob 和许多快照。每个快照均由拍摄快照的日期/时间唯一标识。您可以获取 Blob 及其快照以查看对该 Blob 所做的更改的历史记录。

  • 请注意,这在 Azure CLI v2.34.1 中已更改。根据[变更日志](https://learn.microsoft.com/en-us/cli/azure/release-notes-azure-cli#march-03-2022),引入了一项重大更改,引入了“- -overwrite` 标志,如果省略,则 blob 将**不会** 被覆盖,并且将引发以下错误:**指定的 blob 已存在。** (2认同)