【问题标题】:How can I create files in Azure Data Lake File Shares from .NET?如何从 .NET 在 Azure Data Lake 文件共享中创建文件?
【发布时间】:2021-09-12 03:11:42
【问题描述】:

我一直在尝试在 Azure Data Lake Gen2 文件共享中创建一个目录。我可以使用下面的代码在同一个存储帐户中创建 Blob 容器而不会出错。

        static void Main(string[] args)
        {
            string storageUri = "https://xxxxxxx.dfs.core.windows.net";
            DefaultAzureCredential cred = new DefaultAzureCredential();
            DataLakeServiceClient serviceClient = new DataLakeServiceClient(new Uri(storageUri), cred);
            DataLakeFileSystemClient fileSystem = serviceClient.CreateFileSystem("test");
        }

如何创建文件共享目录而不是 Blob 容器?我试过用xxxxxxx.file.core.windows.net代替dfs,但是得到一个错误AuthenticationErrorDetail: Authentication scheme Bearer is not supported for Files.

来自 Azure Storage Eplorer 的这段片段说明了我的意思。

storage explorer snip

我需要使用其他 API 吗?不同的身份验证?感谢您的帮助。

【问题讨论】:

  • 是否要在 blob 容器中创建目录?
  • 不,我想在 Data Lake 文件共享中创建一个目录。我可以使用显示的代码创建一个容器(又名“blob 目录”)。我添加了一个屏幕截图以更好地解释我所追求的。
  • 啊……我明白了。基本上,您想在 ADLS Gen2 存储帐户中创建文件共享。为此,您需要 ShareServiceClient(使用 Azure.Storage.Files.Shares Nuget 包),并且您的存储 URI 将是 https://xxx.file.core.windows.net
  • 非常感谢@GauravMantri!我加载了您推荐的 API,现在正在尝试。 ShareServiceClient 无法使用 DefaultAzureCredential,所以我需要构建不同的身份验证。
  • 太棒了!您可以使用存储凭据(帐户名/密钥)。

标签: c# azure azure-data-lake-gen2


【解决方案1】:

【讨论】:

  • 遗憾的是,这个 API (DataLakeDirectoryClient) 还创建了 blob 容器,而不是文件共享。
  • Bowman - 您的答案使用旧的(和已弃用的 SDK)。建议您更新使用最新 SDK (Azure.Storage.Files.Shares) 的答案。谢谢。
  • 使用 @GauravMantri 推荐的 Azure.Storage.Files.Shares 包,我可以访问 Data Lake Gen2 文件共享。再次感谢。
  • @cogswellcogs - 请发布您的代码作为答案。它可能会帮助别人。谢谢。
【解决方案2】:

这个示例可以满足我的需要。

        static void Main(string[] args)
        {
            string storageUri = "https://xxxxxx.file.core.windows.net/myshare";
            string sas = "SAS credential to file share xxxxxx.file.core.windows.net/myshare. SAS must include create privilege.";

            AzureSasCredential cred = new AzureSasCredential(sas);
            ShareClient shareClient = new ShareClient(new Uri(storageUri), cred);
            Response<ShareDirectoryClient> resp = shareClient.CreateDirectory("test");
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2020-02-22
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多