我正在执行一个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而不使用此额外的跃点?
答案 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);
}