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

如何从Azure Blob容器已有文件获取Azure Batch ResourceFile

从Azure Blob容器中已有文件生成ResourceFile

要从容器中已存在的Blob生成ResourceFile,核心逻辑是获取目标Blob的SAS访问URL,再用这个URL创建ResourceFile对象,具体实现如下:

实现方法

你可以编写一个独立方法,直接针对已存在的Blob完成操作:

private static ResourceFile GetResourceFileFromExistingBlob(CloudBlobClient blobClient, string containerName, string blobName, string targetFileName)
{
    // 获取容器和Blob引用
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    CloudBlockBlob blobData = container.GetBlockBlobReference(blobName);

    // 先验证Blob是否存在,避免无效操作
    if (!blobData.Exists())
    {
        throw new FileNotFoundException($"Blob {blobName} 不存在于容器 {containerName} 中");
    }

    // 生成符合需求的SAS权限约束
    SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy
    {
        SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
        Permissions = SharedAccessBlobPermissions.Read
    };

    // 构造Blob的SAS访问URL
    string sasBlobToken = blobData.GetSharedAccessSignature(sasConstraints);
    string blobSasUri = $"{blobData.Uri}{sasBlobToken}";

    // 创建并返回ResourceFile,targetFileName是计算节点上保存的文件名
    return ResourceFile.FromUrl(blobSasUri, targetFileName);
}

使用说明

  1. 参数说明:

    • blobClient:已初始化的CloudBlobClient实例
    • containerName:Blob所在的容器名称
    • blobName:容器中目标Blob的准确名称(即上传时的文件名)
    • targetFileName:指定计算节点上下载该文件后的文件名,通常直接使用blobName保持一致即可
  2. 调用示例:
    假设你之前上传的文件名为video.mp4,容器名为batch-input,可以这样调用:

    ResourceFile existingFileResource = GetResourceFileFromExistingBlob(blobClient, "batch-input", "video.mp4", "video.mp4");
    

关键注意点

  • SAS的权限和过期时间可根据实际场景调整,原示例使用2小时有效期的只读权限,满足大部分Batch任务需求
  • 必须先验证Blob是否存在,否则生成SAS时会抛出异常
  • 如果不清楚Blob的准确名称,可以通过container.ListBlobs()方法遍历容器内的Blob进行查找

内容的提问来源于stack exchange,提问作者Michael Meyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:00:52