递归上传到 Azure 文件/创建子文件夹

Recursive Upload to Azure-Files / Create Subfolder

我想将文件夹递归上传到 azure 文件存储。 文件结构通常有几个子文件夹。 在 azure-files 中创建子文件夹的最佳方法是什么?

    foreach (string fullLocalFilename in System.IO.Directory.GetFiles(locationOfFolderToUpload, "*.*", System.IO.SearchOption.AllDirectories))
            {
                Console.WriteLine(fullLocalFilename);
                FileInfo localfile = new FileInfo(fullLocalFilename);
                var root = share.GetRootDirectoryReference();
                string strPfad = localfile.DirectoryName.Substring(3);
                var folder = root.GetDirectoryReference(strPfad);
                Console.WriteLine(strPfad);
                folder.CreateIfNotExists();
                CloudFile file = folder.GetFileReference(localfile.Name);
                if (file.Exists() == false) {
                    file.Create(localfile.Length);
                    file.UploadFromFile(fullLocalFilename);
                    Console.WriteLine(fullLocalFilename);
                }
}

WebException:远程服务器返回错误:(404) 未找到。

我建议你使用Microsoft.Azure.Storage.DataMovement, it supports uploading directory to azure as well create the same structure like in local path. Please install the latest version 1.0.0 of Microsoft.Azure.Storage.DataMovement here。注意,如果您安装了其他azure storage sdk,请先卸载。

例如,如果我有如下所示的本地文件夹:

使用下面的代码:

using System;
using System.Diagnostics;
using System.Threading;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.DataMovement;
using Microsoft.Azure.Storage.File;

namespace AzureDataMovementTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string storageConnectionString = "xxxx";
            CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);

            CloudFileClient fileClient = account.CreateCloudFileClient();
            CloudFileShare fileShare = fileClient.GetShareReference("t22");
            fileShare.CreateIfNotExists();

            CloudFileDirectory fileDirectory= fileShare.GetRootDirectoryReference();

            //here, I want to upload all the files and subfolders in the follow path.
            string source_path = @"F:\temp";

            //if I want to upload the folder 1, then use the following code to create a file directory in azure.
            CloudFileDirectory fileDirectory_2 = fileDirectory.GetDirectoryReference("1");
            fileDirectory_2.CreateIfNotExists();



            UploadDirectoryOptions directoryOptions = new UploadDirectoryOptions
            {
                Recursive = true
            };

            var task = TransferManager.UploadDirectoryAsync(source_path,fileDirectory_2,directoryOptions,null);
            task.Wait();

            Console.WriteLine("the upload is completed");
            Console.ReadLine();
        }

    }
}

代码完成后 运行,导航至 Azure 门户 -> 文件存储:

如果您有更多问题,请告诉我。