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

时间:2016-02-10 16:57:18

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

我正在执行一个azure-batch作业,它创建一个zip文件作为输出。该批处理由一个orchestrator执行,负责将输出文件移动到blob。我有这个工作,但它感觉笨重 - 即我将文件本地下载到orchestrator然后上传到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而不使用此额外的跃点?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

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

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