问题描述
我的存储帐户中有两个文件夹源文件夹和目标文件夹,我想在源文件夹中添加Demo文件夹,并且要将源文件夹文件复制到Demo文件夹,并复制到Archieve文件夹后删除所有源文件夹文件
var directory2 = container.GetDirectoryReference("csvfile / Source Folder / Archieve Folder");
CloudBlockBlob blockBlob2 = directory2.GetBlockBlobReference("empchange1.csv");
- containername-csvfile
- 文件夹来源
- SubFolder-Archieve
解决方法
Azure Blob存储中没有(物理)文件夹。只有虚拟文件夹的概念。通过使用名称中的/
来创建虚拟文件夹。例如,将名为virtualfolder/myblob.ext
的blob放在名为virtualfolder
的虚拟文件夹中。
如果要创建虚拟子文件夹,只需将名称放在Blob中,并使用'/'作为分隔符,如下所示:
virtualfolder/subfolder/myblob.ext
如果您查看the docs for cloudblobdirectory
,也会提到虚拟文件夹的概念代表虚拟 Blob目录,由定界符指定。
也就是说,将Blob移动到其他文件夹与将Blob重命名为例如otherfolder/myblob.ext
相同。不幸的是,没有允许您重命名Blob的API。解决方案是下载Blob内容,然后使用其他名称上传。
这是将Blob从一个容器移动到另一个容器的示例。请注意这是一个两步过程,并注意bindings使此声明性声明和易于理解。我正在将一个信号从in
移到out
:
using BlobMover.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
using System.IO;
using System.Threading.Tasks;
namespace BlobMover
{
public static class BlobMover
{
[StorageAccount("Connection")]
[FunctionName("BlobMover")]
public static async Task Run(
[QueueTrigger("%BlobMover:TriggerQueue%")] BlobMessage msg,[Blob("{source}-error/{name}",FileAccess.Write)] CloudBlockBlob error,[Blob("{destination}/{name}",FileAccess.Write)] CloudBlockBlob @out,[Blob("{source}/{name}",FileAccess.Read)] CloudBlockBlob @in,ILogger log)
{
var trackingId = Guid.NewGuid();
await @out.StartCopyAsync(@in);
await @in.DeleteAsync();
}
}
}