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

使用Bearer Token的C# BlobClient StartCopyFromUriAsync操作异常排查

问题解答

原操作不可行的原因

你当前的代码返回404,本质不是源Blob不存在,而是StartCopyFromUriAsync默认会以匿名访问的方式请求源Blob URI。由于你的容器未开启匿名访问权限,Azure Storage会返回404(这是Storage的安全策略,避免直接泄露资源的存在性),而非明确的权限错误。

无需SAS URI的Blob复制解决方案

既然你拥有容器级的Storage Blob Data Contributor权限,完全可以通过直接读取源Blob内容并写入目标Blob的方式完成复制,全程不需要生成SAS URI。这种方式依赖你已有的TokenCredential权限,操作简单且可靠:

代码示例(流式复制,适合大文件)

var sourceClient = m_blobContainerClient.GetBlobClient(source);
var targetClient = m_blobContainerClient.GetBlobClient(target);

// 流式读写,避免将整个Blob加载到内存
using (var sourceStream = await sourceClient.OpenReadAsync())
{
    await targetClient.UploadAsync(sourceStream, overwrite: true);
}

代码示例(小文件简化版)

如果Blob体积较小,也可以用内存缓存的方式快速实现:

var sourceClient = m_blobContainerClient.GetBlobClient(source);
var targetClient = m_blobContainerClient.GetBlobClient(target);

var downloadResult = await sourceClient.DownloadContentAsync();
await targetClient.UploadAsync(downloadResult.Value.Content, overwrite: true);

补充说明

同一容器内的Blob复制,用读写流的方式不仅避开了SAS的需求,还能直接利用你已有的容器级权限。相比StartCopyFromUriAsync,这种方式更可控,还能实时监控复制进度(如需)。

内容的提问来源于stack exchange,提问作者Uri Shapira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:49:54