使用 BlobUploadOptions 时如何在 Azure BlobClient 中设置覆盖

Tim*_*ude 7 c# azure azure-blob-storage

我注意到在调试跟踪中我当前的方法正在触发 blob 上的 HEAD - 大概是为了检查它是否已经存在。我知道它永远不会,如果它确实存在我想覆盖。我只想直接 PUT 来缩短几毫秒,重要的是减少 Application Insights 应用程序映射中的噪音,其中 HTTP 404 错误显示为 Azure Blob 依赖项失败。

BlobHttpHeaders中没有选项,我也无法在BlobUploadOptions中找到任何此类覆盖选项。我缺少什么?

我想在一次调用中完成设置内容类型和标签的所有工作。我知道以下覆盖,但这将导致后续请求设置我想避免的内容类型和标签。

UploadAsync(Stream content, bool overwrite = false, CancellationToken cancellationToken = default)
Run Code Online (Sandbox Code Playgroud)

SDK 程序集 Azure.Storage.Blobs,版本=12.10.0.0

我当前的代码:

                // blob settings
                var options = new BlobUploadOptions()
                {
                    // set content type
                    HttpHeaders = new BlobHttpHeaders()
                    {
                        ContentType = contentType,
                        ContentEncoding = "UTF-8"
                    },
                    // Set blob index tags
                    Tags = new Dictionary<string, string>
                    {
                        { "quoteid", "123" },
                        { "responseId","456" }
                    }
                };

                // upload blob
                var content = Encoding.UTF8.GetBytes(data);
                using var ms = new MemoryStream(content);
                await blobClient.UploadAsync(
                    ms,
                    options
                    );
Run Code Online (Sandbox Code Playgroud)

更新:

  1. HEAD 正在由 BlobBaseClient.Exists 触发
  2. 也有人在GitHub上问过

小智 1

正如用户 Gaurav Mantri 所建议的 - 堆栈内存溢出BlockBlobClient

注意:UploadAsync(Stream, BlobUploadOptions, CancellationToken)不支持部分更新;现有 Blob 的内容将被新 Blob 的内容覆盖。要执行块 blob 内容的部分更新,请使用Azure.Storage.Blobs.Specialized.BlockBlobClient.StageBlock(System.String,System.IO.Stream,System.Byte[],Azure.Storage.Blobs.Models.BlobRequestConditions,System.IProgress{System.Int64},System.Threading.CancellationToken)CommitBlockListAsync (IEnumerable, CommitBlockListOptions, CancellationToken)操作。

参考:BlockBlobClient.UploadAsync(Stream, BlobUploadOptions, CancellationToken) 方法 (Azure.Storage.Blobs.Specialized) - 面向 .NET 开发人员的 Azure | 微软文档