如何将文件上传到没有文件路径的Azure Blob存储容器的根中

问题描述 投票:0回答:1

下面的代码能够将指定目录localPath中的文件上传到Azure Blob存储容器。问题在于文件没有放置在容器的根目录中,而是创建了与localPath变量定义的文件路径匹配的文件夹。

string localPath = @"C:\example\path\to\files";

生成的Blob容器看起来像这样。

.
+-- example
|   +-- path
|       +-- to
|           +-- files
|               +-- file1.json
|               +-- file2.json
|               +-- file3.json
|               +-- file4.json
|               +-- file5.json

下面的代码需要进行哪些更改,才能将文件移动到容器的根目录,而不是在与localPath匹配的文件夹结构中?

Program.cs

namespace AzureBlobStorageFileTransfer
{
    using Microsoft.Azure.Storage;
    using Microsoft.Azure.Storage.Blob;
    using System;
    using System.IO;
    using System.Threading.Tasks;

    public static class Program
    {
        public static void Main()
        {
            ProcessAsync().GetAwaiter().GetResult();
        }

        private static async Task ProcessAsync()
        {
            CloudStorageAccount storageAccount = null;
            CloudBlobContainer cloudBlobContainer = null;
            string storageConnectionString = Environment.GetEnvironmentVariable("storageconnectionstring");

            if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
            {
                try
                {
                    CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
                    cloudBlobContainer = cloudBlobClient.GetContainerReference("example");

                    BlobContainerPermissions permissions = new BlobContainerPermissions
                    {
                        PublicAccess = BlobContainerPublicAccessType.Blob
                    };
                    await cloudBlobContainer.SetPermissionsAsync(permissions);

                    string localPath = @"C:\example\path\to\files";
                    var txtFiles = Directory.EnumerateFiles(localPath, "*.json");

                    foreach (string currentFile in txtFiles)
                    {
                        CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(currentFile);
                        await cloudBlockBlob.UploadFromFileAsync(currentFile);
                    }

                }
                catch (StorageException ex)
                {
                    Console.WriteLine("Error returned from the service: {0}", ex.Message);
                }
            }
            else
            {
                Console.WriteLine(
                    "A connection string has not been defined in the system environment variables. " +
                    "Add a environment variable named 'storageconnectionstring' with your storage " +
                    "connection string as a value.");
            }
        }
    }
}

下面的代码能够将指定目录localPath中的文件上传到Azure Blob存储容器。问题是文件没有放置在容器的根目录中,而是文件夹...

c# .net-core azure-storage-blobs
1个回答
0
投票

您可以将Path.GetFileName(currentFile)传递到cloudBlobContainer.GetBlockBlobReference以完成此操作:

© www.soinside.com 2019 - 2024. All rights reserved.