如何在azure存储帐户中创建子文件夹并使用azure功能App复制文件

问题描述

我的存储帐户中有两个文件夹源文件夹和目标文件夹,我想在源文件夹中添加Demo文件夹,并且要将源文件文件复制到Demo文件夹,并复制到Archieve文件夹后删除所有源文件文件

  1. 如何在另一个文件夹中创建一个文件
  2. 如何将文件一个文件夹复制到另一个文件

如何添加以这种方式传递的文件夹:

 var directory2 = container.GetDirectoryReference("csvfile / Source Folder / Archieve Folder");
        CloudBlockBlob blockBlob2 = directory2.GetBlockBlobReference("empchange1.csv");
  1. containername-csvfile
  2. 文件夹来源
  3. 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();
        }
    }
}