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

how to create a sub folder in azure storage account and copy the files by using azure function App

我的存储帐户中有两个文件夹源文件夹和目标文件夹我想在我的源文件夹中添加演示文件夹我想将我的源文件夹文件复制到演示文件夹并在复制到之后删除我的所有源文件夹文件归档文件夹

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

如何添加我通过这种方式传递的文件夹:

 var directory2 = container.GetDirectoryReference("csvfile / Source Folder / Archieve Folder");
        CloudBlockBlob blockBlob2 = directory2.GetBlockBlobReference("empchange1.csv");
  1. 容器名称-csv 文件
  2. 文件夹来源
  3. 子文件夹-归档

Azure Blob 存储中没有(物理)文件夹这样的东西。只有虚拟文件夹的概念。通过在名称中使用 /,您将创建一个虚拟文件夹。例如,名为 virtualfolder/myblob.ext 的 blob 放置在名为 virtualfolder.

的虚拟文件夹中

如果您想创建一个虚拟子文件夹,只需将名称放入 blob 中并使用“/”作为分隔符,如下所示:

virtualfolder/subfolder/myblob.ext

如果您看一下 the docs for cloudblobdirectory

,也会提到虚拟文件夹的概念

Represents a virtual directory of blobs, designated by a delimiter character.

也就是说,将 blob 移动到不同的文件夹与将 blob 重命名为 otherfolder/myblob.ext 等同。不幸的是,没有 API 允许您重命名 blob。解决方案是下载 blob 内容并使用不同的名称上传。

下面是将 blob 从一个容器移动到另一个容器的示例。请注意这是一个两步过程,并注意 bindings 使这个声明式且易于理解。我正在 移动 一个 blob 从 inout:

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();
        }
    }
}