0

我正在执行一个 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?

4

2 回答 2

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);
}
于 2016-02-10T20:52:48.827 回答
0

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

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

using(var stream = _blobContainer.GetBlockBlobReference(blobFileName))
{
  node.CopyToStream(stream);
}
于 2016-02-11T09:33:49.283 回答