【问题标题】:moving files from a batch job to blob将文件从批处理作业移动到 blob
【发布时间】:2023-03-25 07:57:01
【问题描述】:

我正在执行一个 azure-batch 作业,它会创建一个 zip 文件作为其输出。批处理由负责将输出文件移动到 blob 的协调器执行。我有这个工作,但感觉很笨重 - 即我将文件本地下载到协调器然后上传到 blob:

CloudTask task; // executed task...
var node = task.GetNodeFile(fileName);
using (var stream = File.OpenWrite(localFile))
{
  node.CopyToStream(stream);
}

var blobRef = _blobContainer.GetBlockBlobReference(blobFileName);
blobRef.UploadFromFile(localFile, FileMode.Open);

我尝试将 blob 流直接传递给 CopyToStream 方法,但没有任何内容移动到 blob:

node.CopyToStream(blobRef.OpenWrite());

是否可以将输出文件从批处理 vm 复制到 blob 而无需额外的跃点?

【问题讨论】:

    标签: c# azure azure-blob-storage azure-batch


    【解决方案1】:

    您可以通过使用内存流来做到这一点:

    CloudTask task; // executed task...
    var node = task.GetNodeFile(fileName);
    
    using (var ms = new MemoryStream())
    {
        node.CopyToStream(ms);
    
        var blobRef = _blobContainer.GetBlockBlobReference(blobFileName);
        blobRef.UploadFromStream(ms);
    }
    

    【讨论】:

    • 谢谢。我确实想到了,唯一的问题是某些 zip 文件会超过 1gb,甚至可能超过 3 或 4。
    • 我接受这是一个可行的解决方案,我没有提及文件大小。
    【解决方案2】:

    答案实际上很简单——处理云引用流似乎会强制刷新——即:

    CloudTask task; // executed task...
    var node = task.GetNodeFile(fileName);
    
    using(var stream = _blobContainer.GetBlockBlobReference(blobFileName))
    {
      node.CopyToStream(stream);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多