【问题标题】:Container name added to blob filename by GetBlockBlobReference() method通过 GetBlockBlobReference() 方法将容器名称添加到 blob 文件名
【发布时间】:2017-10-26 01:27:25
【问题描述】:

我正在为 Azure 数据工厂管道实现一个自定义活动,以将 blob 文件从一个容器移动到另一个容器。源/目标文件的名称从管道自定义活动的输入/输出数据集传递到 DotNetActivity。为简单起见,我们将源文件名设为“input.txt”,将目标文件名设为“output.txt”。容器“上传”和“处理”都存在。

以下代码完成了复制部分,无论如何结果不是我所期望的。

logger.Write("Source filename  : {0}", sourceFilename);       // => input.txt
logger.Write("Destin. filename : {0}", destinationFileName);  // => output.txt

CloudBlobContainer sourceContainer = blobClient.GetContainerReference("upload");
CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(sourceFilename);
CloudBlobContainer destinationContainer = blobClient.GetContainerReference("processed");
CloudBlockBlob destinationBlob = destinationContainer.GetBlockBlobReference(destinationFileName);

logger.Write("Source blob: {0}", sourceBlob.Name);            // => input.txt
logger.Write("Destination blob: {0}", destinationBlob.Name);  // => processed/output.txt ???

destinationBlob.StartCopyFromBlob(sourceBlob);

因此,blob 'processed/output.txt' 被创建到 'processed' 容器中,而目的是将 blob 命名为 'output.txt'。

为什么将“已处理/”前缀添加到目标文件名?如何去掉前缀?

【问题讨论】:

  • 注意到当数据工厂从 VisualStudio 重新部署(发布)到 Azure 时,更改的 .NET 实现不会重新构建,但部署会加载现有的 .NET DLL。显然问题是由早期版本的 DotNetActivity 引起的。我现在在发布数据工厂更改之前手动构建 DotNetActivity,上面的代码按预期工作。似乎是由用户错误引起的误报:-O
  • 请在评论中提供更新作为您的答案。既然你解决了它

标签: c# azure azure-blob-storage


【解决方案1】:

注意到当数据工厂从 VisualStudio 重新部署(发布)到 Azure 时,更改的 .NET 实现不会重新构建,但部署会加载现有的 .NET DLL。显然问题是由早期版本的 DotNetActivity 引起的。我现在在发布数据工厂更改之前手动构建 DotNetActivity,上面的代码按预期工作。 (错过了之前指出的解决方案)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多