public async Task DownloadAsync(
            DownloadFileParametersModel downloadFileParametersModel,
            CancellationToken cancellationToken)
        {
            try
            {
                cancellationToken.ThrowIfCancellationRequested();

                using (var client = new HttpClient())
                {
                    using (var result = await client.GetAsync(
                               Path.Combine(
                                   $"{downloadFileParametersModel.RemoteUri}" +
                                   $"{downloadFileParametersModel.FileNameRemote}.{downloadFileParametersModel.FileFormat}"
                                   ),
                               cancellationToken))
                    {
                        if (result.IsSuccessStatusCode)
                        {
                            var fileBytes = await result.Content.ReadAsByteArrayAsync();

                            await File.WriteAllBytesAsync(
                                Path.Combine(
                                    $"{downloadFileParametersModel.PathToFile}",
                                    $"{downloadFileParametersModel.FileNameLocal}.{downloadFileParametersModel.FileFormat}"),
                                fileBytes, cancellationToken);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new NotSupportedException("Ошибка во время выполнения." + ex);
            }
        }
        public async Task <DownloadAsyncResponseModel> DownloadAsync(CancellationToken cancellationToken)
        {
            try
            {
                cancellationToken.ThrowIfCancellationRequested();

                _logger.LogInformation("DownloadAsync: " + "Start");

                // проверяем свежесть файла
                var isNewFile = await _fileService.CheckExcelFile(DateTime.UtcNow, _fileName);

                // TODO: вынести в конфиг
                // TODO: ссылки хранить в бд
                // https://www.mirea.ru/upload/medialibrary/97d/KBiSP-4-kurs-2-sem-_1_.xlsx
                var downloadFileParametersModel = new DownloadFileParametersModel
                {
                    PathToFile     = Path.Combine("Infrastructure", "ScheduleFile"),
                    RemoteUri      = new Uri("https://www.mirea.ru/upload/medialibrary/97d/"),
                    FileNameLocal  = "scheduleFile",
                    FileNameRemote = "KBiSP-4-kurs-2-sem",
                    FileFormat     = "xlsx"
                };

                _logger.LogInformation("DownloadAsync: " + "isNewFile: " + isNewFile);

                var result = new DownloadAsyncResponseModel
                {
                    IsNewFile = isNewFile
                };


                // если не свежий => качаем новый (1 сутки)
                if (!isNewFile)
                {
                    await _fileService.DownloadAsync(
                        downloadFileParametersModel, cancellationToken);

                    result.Message = "Данные обновлены!";
                }
                else
                {
                    result.Message = "Обновление невозможно. Попробуйте позже.";
                }

                return(result);
            }
            catch (Exception ex)
            {
                _logger.LogError("Exception DownloadAsync: " + ex);
                throw new NotSupportedException("Ошибка во время выполнения." + ex);
            }
        }
Beispiel #3
0
        public async void DownloadByLinkAsync_DoneTask_ShouldBeDownloadFile(int fileNameFlag)
        {
            // Arrange
            var fileService = new FileService();
            var fileName    = Path.Combine(TestValueProvider.GetValueStringByFlag(fileNameFlag));
            var downloadFileParametersModel = new DownloadFileParametersModel
            {
                //https://www.mirea.ru/upload/medialibrary/97d/KBiSP-4-kurs-2-sem-_1_.xlsx
                PathToFile     = string.Empty,
                RemoteUri      = new Uri("https://www.mirea.ru/upload/medialibrary/97d/"),
                FileNameLocal  = fileName,
                FileNameRemote = "KBiSP-4-kurs-2-sem-_1_",
                FileFormat     = "xlsx"
            };

            // Act
            await fileService.DownloadAsync(downloadFileParametersModel, CancellationToken.None);

            // Assert
            var result = File.Exists(fileName + ".xlsx");

            Assert.True(result);
        }