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

Я пробовал разные примеры, найденные в Интернете, но ни один из них не решил мой случай. Вот некоторые из примеров: https://www.red-gate.com/simple-talk/cloud/cloud-development/uploading-files-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);
    }

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

Любая помощь будет высоко оценен. :)

0
Pavel 8 Окт 2019 в 12:11

1 ответ

Лучший ответ

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

Мой код:

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

                    }
                }
              

            }

Перед запуском кода введите описание изображения здесь

После запуска кода введите описание изображения здесь

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

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

0
Community 20 Июн 2020 в 09:12