Example #1
0
        /// <summary>
        /// Загрузить файл на сервер
        /// !!! добавить прогресс !!!
        /// </summary>
        /// <param name="localFilePath">Локальный путь и имя файла для загрузки.</param>
        /// <param name="remoteFileUri">Путь к файлу и имя файла на сервере.</param>
        public async Task <bool> UploadFileAsync(string localFilePath, Uri remoteFileUri)
        {
            bool result = false;

            Progress_Clear();
            Show_Message($"Загрузка файла {localFilePath}");

            if (quota.IsLimited)
            {
                FileInfo fileInfo = new FileInfo(localFilePath);
                if (quota.QuotaAvailableBytes < fileInfo.Length)
                {
                    LogController.Warn(logger, $"Недостаточно места на сервере");
                    Progress_Complete();
                    Show_Message();
                    return(false);
                }
            }

            try
            {
                using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version))
                {
                    Progress <WebDavProgress> progress = new Progress <WebDavProgress>();
                    progress.ProgressChanged += Progress_ProgressChanged;
                    session.Timeout           = TimeSpan.FromDays(1);

                    Stream stream = File.OpenRead(localFilePath);
                    if (Settings.SpeedLimiter.IsLimitUpload)
                    {
                        stream = new ThrottledStream(stream, Settings.SpeedLimiter.UploadSpeedLimit * 1024);
                    }
                    Set_Stream(stream);

                    string contentType = MimeMapping.GetMimeMapping(localFilePath);
                    result = await session.UploadFileWithProgressAsync(remoteFileUri, stream, contentType, progress, CancellationToken.None);

                    if (result)
                    {
                        LogController.Info(logger, $"Файл успешно загружен: {localFilePath}");
                        Progress_Complete();
                    }
                    else
                    {
                        LogController.Warn(logger, $"Файл не загружен: {localFilePath}");
                    }

                    Close_Stream();
                    //stream.Dispose();
                }
            }
            catch (Exception e)
            {
                LogController.Error(logger, e, $"Ошибка загрузки файла: {localFilePath}");
            }

            Show_Message();

            return(result);
        }