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

如何从本地Azure存储模拟器复制Blob到远程存储?C#调用StartCopy报404错误

本地Azure存储模拟器Blob复制到远程Azure存储的解决方案

首先得明确:Azure远程存储服务没法直接访问你本地的存储模拟器资源,这就是你调用StartCopy时出现404的核心原因——云端服务根本连不上你本地的http://127.0.0.1地址,自然找不到要复制的Blob。

下面给你两种可行的解决思路:

方法一:下载后再上传(推荐)

这是最稳妥的方案,把本地模拟器里的Blob先下载到本地内存/临时文件,再上传到远程存储。适合绝大多数开发场景,尤其是文件大小适中的情况。

示例C#代码:

// 假设你已经初始化了本地模拟器的容器和远程存储的容器
CloudBlockBlob sourceBlob = localStorageContainer.GetBlockBlobReference("your-video-file.mp4");
CloudBlockBlob destinationBlob = remoteStorageContainer.GetBlockBlobReference("your-video-file.mp4");

// 用内存流中转(小文件推荐)
using (var memoryStream = new MemoryStream())
{
    // 从本地模拟器下载Blob到内存流
    await sourceBlob.DownloadToStreamAsync(memoryStream);
    // 重置流的位置到开头,否则上传会从末尾开始
    memoryStream.Position = 0;
    // 上传到远程存储
    await destinationBlob.UploadFromStreamAsync(memoryStream);
}

// 如果是大文件,建议用临时文件避免内存占用过高
// using (var tempFile = Path.GetTempFileName())
// {
//     await sourceBlob.DownloadToFileAsync(tempFile, FileMode.Create);
//     await destinationBlob.UploadFromFileAsync(tempFile);
//     File.Delete(tempFile);
// }

方法二:暴露本地模拟器到公网(不推荐)

如果你的本地机器有公网IP,并且能通过端口映射把模拟器的默认端口(10000)暴露出去,就可以用公网地址作为源URI调用StartCopy。但这种方法风险很高:

  • 会把本地开发环境暴露到公网,存在安全隐患
  • 配置复杂,需要处理防火墙、端口转发等问题
  • 模拟器本身是为本地开发设计的,稳定性和性能不适合公网访问

所以除非特殊需求,强烈不建议用这种方式。

额外注意点

  • 确认本地模拟器中的Blob确实存在,避免因本地资源缺失导致的问题
  • 上传完成后,如果你要对接Azure Media Services,记得确保远程存储账户和Media Services账户已经正确关联,并且Blob的权限设置符合编码任务的要求

内容的提问来源于stack exchange,提问作者Matteo Murdocco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:47:07