将文件从批处理作业移动到 blob

moving files from a batch job to blob

我正在执行一个 azure 批处理作业,它创建一个 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());

是否可以在没有这个额外跃点的情况下将输出文件从批处理虚拟机复制到 blob?

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

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);
}

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

CloudTask task; // executed task...
var node = task.GetNodeFile(fileName);

using(var stream = _blobContainer.GetBlockBlobReference(blobFileName))
{
  node.CopyToStream(stream);
}