Загрузите файл в Azure datalake через API, используя c # - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь загрузить файлы в datalake, используя API. У меня возникли проблемы при загрузке.

Я пробовал разные примеры, найденные в сети, но ни один из них не помог мне. Вот некоторые примеры: https://www.red -gate.com / simple-talk / cloud / cloud-development / uploading-файлы-azure-data-lake-using-net-app /

https://www.taygan.co/blog/2018/01/02/upload-a-file-to-azure-data-lake-store-using-net

Позвольте мне показать вам, как я поступил с моим кодом:

public  IActionResult UploadFileOnAzure( string path, string name, IFormFile file)
    {

        _dlsService.CreateDir(path, name); //this works
        //create file
        _dlsService.CreateFile(path); //this also works so I create a file in azure
    //I would like to know what are my next steps from here. How should I upload the file in azure? 
     Should I convert the file in a stream then write the created file? I'm very confused. 

        return null;
    }

 private AdlsClient _client;

 public async Task<Stream> CreateFile(string path)
    {
        return await _client.CreateFileAsync(path, IfExists.Fail);
    }

Я хотел бы знать, каковы мои дальнейшие шаги здесь. Как мне загрузить файл в Azure? Должен ли я преобразовать файл в поток, а затем записать созданный файл? Я очень смущен.

Любая помощь будет принята с благодарностью. :)

1 Ответ

1 голос
/ 09 октября 2019

Согласно моему тесту, когда мы используем метод CreateFileAsync, он автоматически создает любые родительские каталоги, которые не существуют, поэтому нам не нужно создавать каталоги. Кроме того, он вернет поток, а затем вы можете поток, чтобы загрузить файл. Например

Мой код:

ServiceClientCredentials cred = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret).GetAwaiter().GetResult();
            AdlsClient client = AdlsClient.CreateClient("test089.azuredatalakestore.net", cred);

            string path = "/Test/testFilename.txt";
            using (var stream = client.CreateFile(path, IfExists.Fail))
            {

                using (StreamReader sr = new StreamReader(@"E:\mytest.txt"))
                {
                    string line;
                    while ( (line =sr.ReadLine()) != null) {


                        var textBytes = Encoding.UTF8.GetBytes(line + "\n\r");
                        stream.Write(textBytes, 0, textBytes.Length);

                    }
                }


            }

До того, как я выполню код enter image description here

После того, как я выполню код enter image description here

Для получения более подробной информации, пожалуйста, обратитесь к

https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-service-to-service-authenticate-using-active-directory

https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-data-operations-net-sdk#create-a-file-and-directory

...