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

标签 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)

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
                    );

更新:

  1. HEAD 正在由 BlobBaseClient.Exists 触发
  2. 其他人也在 GitHub 上提问

最佳答案

根据User Gaurav Mantri - Stack Overflow的建议,使用BlockBlobClient

注意: UploadAsync(Stream, BlobUploadOptions, CancellationToken) 不支持部分更新;现有 Blob 的内容将被新 Blob 的内容覆盖。要执行 block 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) Method (Azure.Storage.Blobs.Specialized) - Azure for .NET Developers | Microsoft Docs

关于c# - 使用 BlobUploadOptions 时如何在 Azure BlobClient 中设置覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71428072/

相关文章:

c# - 我需要使用哪个 FileSystemWatcher 过滤器来查找新文件

sql-server - 从 SQL 管理工作室连接到 Azure DB 失败 MSSQLSERVER_10060

azure - 将 Azure Blob 存储 csv 文件作为附件发送给 Microsoft Azure 上的用户

c# - 如何使用.NET将大文件上传到azure容器?

c# - 如何在 ASP.NET 中实现 GZip 压缩?

c# - 在运行时加载 NuGet 依赖项

c# - .net 随机生成器是如何实现的?

C# 控制台/服务器访问网站

azure - 使用 Azure 服务总线时 SignalR 无法连接

使用 SAS 上传 Android Azure 存储 Blob; com.microsoft.azure.storage.StorageException : The specified resource does not exist