You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Stream上传Blob并配置BlobUploadOptions且不覆盖已有Blob?

解决Stream上传Blob时同时设置BlobUploadOptions和不覆盖已有Blob的问题
  • 不用纠结现有重载的限制,BlobUploadOptions本身支持通过条件控制是否覆盖已有Blob:在BlobUploadOptions的Conditions属性中配置BlobRequestConditions,设置IfNoneMatch = ETag.All,就能实现“仅当Blob不存在时才上传”的效果,等价于overwrite=false。

  • 示例代码:

// 初始化BlobClient
BlobClient blobClient = new BlobClient(connectionString, containerName, blobName);

// 创建BlobUploadOptions并配置不覆盖条件
var uploadOptions = new BlobUploadOptions
{
    Conditions = new BlobRequestConditions
    {
        // 设置IfNoneMatch为ETag.All,仅当Blob不存在时上传
        IfNoneMatch = ETag.All
    },
    // 可按需添加其他配置,比如元数据、HTTP头
    Metadata = new Dictionary<string, string>
    {
        { "uploadedBy", "demo" }
    }
};

// 上传Stream
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("待上传内容")))
{
    try
    {
        await blobClient.UploadAsync(stream, uploadOptions);
        Console.WriteLine("上传成功:目标Blob不存在");
    }
    catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.PreconditionFailed)
    {
        Console.WriteLine("上传失败:目标Blob已存在");
    }
}
  • 逻辑说明:当设置IfNoneMatch = ETag.All时,Azure存储服务会检查目标Blob是否存在。如果Blob已存在,服务端会返回412 Precondition Failed错误,此时不会覆盖原有Blob;如果Blob不存在,则正常完成上传。这和overwrite=false的行为完全一致。

内容的提问来源于stack exchange,提问作者me.at.coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:48:10