/// <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); }
public async Task <bool> CheckAuthorizationAsync() { LogController.Info(logger, $"Попытка авторизации. user: {User}, server {Server}"); try { using (WebDavSession session = new WebDavSession(httpClientHandler, version)) { IList <WebDavSessionItem> item = await session.ListAsync(Server); LogController.Info(logger, $"Авторизация прошла успешно. user: {User}, server: {Server}"); return(true); } } //catch (HttpRequestException e) //{ // LogController.Error(logger, e); // return false; //} //catch (WebDavException e) //{ // LogController.Error(logger, e); // return false; //} catch (Exception e) { LogController.Error(logger, e, "Ошибка авторизации"); return(false); } }
private void RefreshFolderView() { treeViewServer.Nodes.Clear(); IFolder folder = null; try { WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); string url = this._protocol + "://" + this._domain + "/"; if (this._path != String.Empty) { url += this._path + "/"; } folder = session.OpenFolder(url); } catch(UnauthorizedException) { MessageBox.Show("nicht Authorisiert"); return; } catch(Exception) { } if (folder != null) { IHierarchyItem[] items = folder.GetChildren(); TreeNode root = new TreeNode("/"); treeViewServer.Nodes.Add(root); foreach(IHierarchyItem item in items) { if (item.ItemType == ItemType.Folder) { root.Nodes.Add(new TreeNode(item.DisplayName)); } } } }
public WebDavManager(ICryptography cryptography, IWebDavAuthorizationService webDavAuthorizationService) { _cryptography = cryptography; _webDavAuthorizationService = webDavAuthorizationService; _webDavSession = new WebDavSession(); }
private void InitVars() { Outlook.Store store = null; // There is no good method for searching store. foreach (Outlook.Store s in Application.Session.Stores) { if (s.DisplayName == storeName) { store = s; break; } } // TODO fix folder search. olFolderContacts = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder; olFolderCalendar = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar) as Outlook.Folder; olFolderContacts.UserDefinedProperties.Add("remoteID", Outlook.OlUserPropertyType.olText); olFolderContacts.UserDefinedProperties.Add("modifyDate", Outlook.OlUserPropertyType.olDateTime); olFolderCalendar.UserDefinedProperties.Add("remoteID", Outlook.OlUserPropertyType.olText); olFolderCalendar.UserDefinedProperties.Add("modifyDate", Outlook.OlUserPropertyType.olDateTime); tmpFilnameContacts = Path.GetTempFileName().Replace(".tmp", ".vcf"); tmpFilnameCalendar = Path.GetTempFileName().Replace(".tmp", ".ics"); session = new WebDavSession(); session.Credentials = new NetworkCredential(login, password); }
public async Task <bool> ExistsAsync(Uri uri) { bool result = false; Progress_Start(); //Show_Message($"Поиск {uri}"); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { result = await session.ExistsAsync(uri); //if (result) //{ // LogController.Info(logger, $"Сервер содержит {uri}"); //} //else //{ // LogController.Info(logger, $"Сервер не содержит {uri}"); //} } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка, не удалось проверить существование {uri}"); } Progress_Stop(); Show_Message(); return(result); }
public void UT_WebDavSession_ConstructorWithNomDefaultHttpVersion() { var credentials = new NetworkCredential(UserName, Password); var session = new WebDavSession(credentials, new Version(2, 0)); Assert.AreEqual(new Version(2, 0), session.HttpVersion); }
public async Task <bool> RunAsync() { string cloudUsr = "******"; string cloudPw = "****"; string url = @"https://nextcloud.*****.gr/remote.php/webdav/"; string pathToSave = @"c:\temp\nextcloud\"; string docToSave = $"{pathToSave}tmp432534534.docx"; try { // Basic authentication required var credentials = new NetworkCredential(cloudUsr, cloudPw); var webDavSession = new WebDavSession(@"https://nextcloud.egritosgroup.gr/remote.php/webdav/", credentials); //// OR without authentication //var client = new WebDAVClient.Client(new NetworkCredential()); var items = await webDavSession.ListAsync(@"/"); FileStream dataToUpload = File.OpenRead(docToSave); var uri = new Uri(@"https://nextcloud.egritosgroup.gr/remote.php/webdav/"); var rrr = await webDavSession.UploadFileAsync(items[1], "asdasdasd.docx", dataToUpload); } catch (Exception e_cld) { Console.WriteLine("An error occurred: '{0}'", e_cld); } return(true); }
/// <summary> /// Переместить файл/каталог на сервере /// </summary> /// <param name="sourceUri"></param> /// <param name="destinationUri"></param> public async Task <bool> MoveAsync(Uri sourceUri, Uri destinationUri) { bool result = false; Progress_Start(); Show_Message($"Перемешщение из {sourceUri} в {destinationUri}"); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { result = await session.MoveAsync(sourceUri, destinationUri); if (result) { LogController.Info(logger, $"Успешно перемещено из {sourceUri} в {destinationUri}"); } else { LogController.Warn(logger, $"Не перемещено из {sourceUri} в {destinationUri}"); } } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка перемещения из {sourceUri} в {destinationUri}"); } Progress_Stop(); Show_Message(); return(result); }
/// <summary> /// Удалить файл/каталог на сервере /// </summary> /// <param name="uri">Путь к файлу/каталогу на сервере.</param> public async Task <bool> DeleteAsync(Uri uri) { bool result = false; Progress_Start(); Show_Message($"Удаление файла/каталога {uri}"); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { result = await session.DeleteAsync(uri); if (result) { LogController.Info(logger, $"Успешно удалено: {uri}"); } else { LogController.Warn(logger, $"Не удалено: {uri}"); } } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка удаления: {uri}"); } Progress_Stop(); Show_Message(); return(result); }
/// <summary> /// Создать каталог на сервере /// </summary> /// <param name="dirUri">Путь к каталогу на сервере.</param> public async Task <bool> CreateDirAsync(Uri dirUri) { bool result = false; Progress_Start(); Show_Message($"Создание каталога {dirUri}"); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { result = await session.CreateDirectoryAsync(dirUri); if (result) { LogController.Info(logger, $"Каталог успешно создан: {dirUri}"); } else { LogController.Warn(logger, $"Каталог не создан: {dirUri}"); } } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка создания каталога: {dirUri}"); } Progress_Stop(); Show_Message(); return(result); }
public DecaTecWebDavClient(IConnectionSettings connectionSettings) { _connectionSettings = connectionSettings; var credentials = new NetworkCredential(_connectionSettings.UserName, _connectionSettings.GetPassword()); _session = new WebDavSession(credentials); }
public WebDavManager(ICryptography cryptography, IWebDavAuthorizationService webDavAuthorizationService) { _cryptography = cryptography; _webDavAuthorizationService = webDavAuthorizationService; Log = LogManager.GetLogger(this.GetType()); _webDavSession = new WebDavSession(); }
private WebDavSession CreateWebDavSession() { var httpClientHandler = new HttpClientHandler(); httpClientHandler.PreAuthenticate = true; httpClientHandler.Credentials = new NetworkCredential(this.userName, this.password); var debugHttpMessageHandler = new DebugHttpMessageHandler(httpClientHandler); var session = new WebDavSession(debugHttpMessageHandler); return(session); }
private WebDavSession CreateWebDavSession() { var httpClientHandler = new HttpClientHandler() { // Ignore all certificate errors. ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return(true); }, PreAuthenticate = true, Credentials = new NetworkCredential(userName, password) }; var debugHttpMessageHandler = new DebugHttpMessageHandler(httpClientHandler); var session = new WebDavSession(debugHttpMessageHandler); return(session); }
/// <summary> /// Скачать файл с сервера /// </summary> /// <param name="remoteFileUri">Исходный путь и имя файла на сервере.</param> /// <param name="localFilePath">Путь и имя файла для загрузки в локальной файловой системе.</param> public async Task <bool> DownloadFileAsync(Uri remoteFileUri, string localFilePath) { bool result = false; Progress_Clear(); Show_Message($"Скачивание файла {localFilePath}"); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { Progress <WebDavProgress> progress = new Progress <WebDavProgress>(); progress.ProgressChanged += Progress_ProgressChanged; Stream stream = File.Create(localFilePath); if (Settings.SpeedLimiter.IsLimitDownload) { stream = new ThrottledStream(stream, Settings.SpeedLimiter.DownloadSpeedLimit * 1024); } Set_Stream(stream); result = await session.DownloadFileWithProgressAsync(remoteFileUri, stream, progress, CancellationToken.None); if (result) { LogController.Info(logger, $"Файл успешно скачен: {remoteFileUri}"); Progress_Complete(); } else { LogController.Warn(logger, $"Файл не скачен: {remoteFileUri}"); } Close_Stream(); //stream.Dispose(); } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка скачивания файла: {remoteFileUri}"); } Show_Message(); return(result); }
public static void Main (string[] args) { ICommandLineParser parser = new CommandLineParser(); if (!parser.ParseArguments(args, Options) || args.Length == 0) { Console.WriteLine(Options.GetUsage()); return; } WebDavSession session = new WebDavSession(); if (Options.Username != String.Empty && Options.Password != String.Empty) { session.Credentials = new NetworkCredential(Options.Username, Options.Password); } IFolder folder = session.OpenFolder(Options.Host); IHierarchyItem[] items = folder.GetChildren(); foreach(IHierarchyItem item in items) { Console.WriteLine(item.DisplayName); } Console.WriteLine(Options.Host); }
// переделать через PropFind public async Task <DirectoryItem> GetItemAsync(Uri fileUri) { DirectoryItem dirItem = new DirectoryItem(); Progress_Start(); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { string fileUrl = fileUri.ToString(); string dirUrl = fileUrl.Remove(fileUrl.LastIndexOf("/")); IList <WebDavSessionItem> items = await session.ListAsync(dirUrl); string fileName = fileUrl.Remove(0, fileUrl.LastIndexOf("/") + 1); WebDavSessionItem sessionItem = items.FirstOrDefault(i => i.Name == fileName); if (sessionItem != null) { dirItem = new DirectoryItem { Name = sessionItem.Name, Uri = sessionItem.Uri, LastModified = sessionItem.LastModified, ContentLength = sessionItem.ContentLength, QuotaUsedBytes = sessionItem.QuotaUsedBytes, IsFolder = sessionItem.IsFolder }; } //LogController.Info(logger, $"Получен файл {fileUri}"); } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка, не удалось получить файл {fileUri}"); } Progress_Stop(); return(dirItem); }
private static async Task Test() { var credentials = new NetworkCredential("logon", "*logon*"); var webDavSession = new WebDavSession(@"https://nextcloud.espackeuro.com/remote.php/dav/files/logon/", credentials); try { var items = await webDavSession.ListAsync(@"Android/APK/"); foreach (var item in items) { using (FileStream fs = File.OpenWrite(string.Format(@"d:\temp\{0}", item.Name))) await webDavSession.DownloadFileAsync(item.Uri, fs); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// Список файлов в данном каталоге /// </summary> /// <param name="dirUri">Путь к каталогу на сервере.</param> public async Task <List <DirectoryItem> > ListAsync(Uri dirUri) { List <DirectoryItem> list = new List <DirectoryItem>(); Progress_Start(); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { IList <WebDavSessionItem> items = await session.ListAsync(dirUri); foreach (WebDavSessionItem item in items) { // обработка списка DirectoryItem dirItem = new DirectoryItem { Name = item.Name, Uri = item.Uri, LastModified = item.LastModified, ContentLength = item.ContentLength, QuotaUsedBytes = item.QuotaUsedBytes, IsFolder = item.IsFolder }; list.Add(dirItem); } //LogController.Info(logger, $"Получено содержимое каталога {dirUri}"); } await LoadQuotaAsync(); } catch (Exception e) { LogController.Error(logger, e, $"Ошибка, не удалось получить содержимое каталога {dirUri}"); } Progress_Stop(); return(list); }
private WebDavSession CreateWebDavSession(MockHttpMessageHandler mockHandler) { var credentials = new NetworkCredential(UserName, Password); var httpClientHandler = new HttpClientHandler() { Credentials = credentials, PreAuthenticate = true }; var debugHttpMessageHandler = new DebugHttpMessageHandler(httpClientHandler) { InnerHandler = mockHandler }; var session = new WebDavSession(debugHttpMessageHandler) { BaseUri = new Uri(WebDavRootFolder, UriKind.Absolute) }; return(session); }
/// <summary> /// Переименовать файл/каталог на сервере /// </summary> /// <param name="uri"></param> /// <param name="newName"></param> public async Task <bool> RenameAsync(Uri uri, string newName) { Uri newUri = new Uri(uri.AbsoluteUri.Remove(uri.AbsoluteUri.Length - uri.Segments.Last().Length)); newUri = new Uri(newUri, newName); bool result = false; Progress_Start(); Show_Message($"Переименование из {uri} в {newUri}"); try { using (WebDavSession session = new WebDavSession(Server, httpClientHandler, version)) { result = await session.MoveAsync(uri, newUri); if (result) { LogController.Info(logger, $"Успешно переименовано из {uri} в {newUri}"); } else { LogController.Warn(logger, $"Не переименовано из {uri} в {newUri}"); } } } catch (Exception e) { LogController.Error(logger, e, $"Ошибка переименованования из {uri} в {newUri}"); } Progress_Stop(); Show_Message(); return(result); }
private WebDavSession GetWebDavSession() { if (session == null || connectionFail){ session = new WebDavSession(webDavLicense); session.Credentials = new NetworkCredential(WebDavUserName, WebDavPassword); } return session; }
private void ShowSelectedFolderContent() { listViewFiles.Items.Clear(); IFolder folder = null; try { string path = this.GetSelectedFolder(); WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); string url = this._protocol + "://" + this._domain + "/"; if (path != String.Empty) { url += path + "/"; } folder = session.OpenFolder(url); } catch(Exception) { } if (folder != null) { IHierarchyItem[] items = folder.GetChildren(); foreach(IHierarchyItem item in items) { if (item.ItemType == ItemType.Resource) { PropertyName[] propNames = new PropertyName[] { new PropertyName("getcontentlength", "DAV:") }; Property[] properties = item.GetPropertyValues(propNames); string contentLength = ""; if (properties.Length > 0) { try { Int64 content_length = Convert.ToInt64(properties.First().StringValue); if (content_length > 1000000000000) { contentLength = (content_length / 1099511627776.0).ToString("f") + " TB"; } else if (content_length > 1000000000) { contentLength = (content_length / (1024.0 * 1024.0 * 1024.0)).ToString("f") + " GB"; } else if (content_length > 1000000) { contentLength = (content_length / (1024.0 * 1024.0)).ToString("f") + " MB"; } else if (content_length > 1000) { contentLength = (content_length / 1024.0).ToString("f") + " KB"; } else { contentLength = content_length.ToString() + " B"; } } catch(Exception) { contentLength = properties.First().StringValue; } } string[] test = new string[] { item.DisplayName, contentLength }; ListViewItem lvItem = new ListViewItem(test); listViewFiles.Items.Add(lvItem); } else if (item.ItemType == ItemType.Folder) { if (item.DisplayName != String.Empty) { bool nodeExists = false; foreach(TreeNode currentNode in treeViewServer.SelectedNode.Nodes) { if (currentNode.Text == item.DisplayName) { nodeExists = true; break; } } if (!nodeExists) { TreeNode currentNode = new TreeNode(item.DisplayName); treeViewServer.SelectedNode.Nodes.Add(currentNode); } } } } } }
private void contextMenuStripFilename_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { ((ContextMenuStrip)sender).Hide(); switch(e.ClickedItem.Name) { case "toolStripMenuItemSaveUnder": if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); IFolder folder = session.OpenFolder(this._protocol + "://" + this._domain + "/" + this._path + "/"); IResource resource = folder.GetResource(listViewFiles.SelectedItems[0].Text); string directorySeparator = (Environment.OSVersion.Platform.ToString() == "Unix") ? "/" : "\\"; string fullSaveFilename = folderBrowserDialog.SelectedPath + directorySeparator + listViewFiles.SelectedItems[0].Text; DownloadForm downloadForm = new DownloadForm(); downloadForm.Shown += (object downloadFormSender, EventArgs downloadFormE) => { downloadForm.DownloadResource(resource, fullSaveFilename); }; downloadForm.ShowDialog(); } break; case "toolStripMenuItemUploadFile": if (openFileDialog.ShowDialog() == DialogResult.OK) { string filename = openFileDialog.SafeFileName; string nodeText = ""; TreeNode currentNode = treeViewServer.SelectedNode; while(currentNode != null) { if (currentNode.Text != "/") { nodeText = "/" + currentNode.Text + nodeText; } currentNode = currentNode.Parent; } string fullDestinationPath = comboBoxProtocol.Text + "://" + textBoxServer.Text + textBoxPath.Text + nodeText + "/" + filename; Console.WriteLine(fullDestinationPath); Uri destination = new Uri(fullDestinationPath); IFolder folder = null; try { WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); folder = session.OpenFolder(Regex.Replace(destination.AbsoluteUri, "[^/]+$", "")); IResource resource = folder.CreateResource(filename); DownloadForm downloadForm = new DownloadForm(); downloadForm.Shown += (object downloadFormSender, EventArgs downloadFormE) => { downloadForm.UploadFile(openFileDialog.FileName, resource); }; downloadForm.FormClosed += (object closedSender, FormClosedEventArgs closedE) => { this.ShowSelectedFolderContent(); }; downloadForm.ShowDialog(); } catch(Exception) { } } break; case "toolStripMenuItemDeleteFile": string message = "Möchstest du die Datei (" + listViewFiles.SelectedItems[0].Text + ") wirklich löschen?"; string caption = "Datei löschen"; if (MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { string folderUri = comboBoxProtocol.Text + "://" + textBoxServer.Text + "/" + this.GetSelectedFolder() + "/"; Console.WriteLine(folderUri); WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); IFolder folder = session.OpenFolder(folderUri); IResource resource = folder.GetResource(listViewFiles.SelectedItems[0].Text); resource.Delete(); this.ShowSelectedFolderContent(); } break; case "toolStripMenuItemCreateFolder": Form inputBox = new Form(); inputBox.Name = "inputCreateNewFolder"; inputBox.Width = 350; inputBox.Height = 150; inputBox.Text = "Name des zu erstellenden Ordners"; TextBox input = new TextBox(); input.Name = "newWebDavFolder"; input.Width = 250; input.Top = 30; input.Left = 50; inputBox.Controls.Add(input); Button acceptButton = new Button(); acceptButton.Name = "buttonNewWebDavFolderAccept"; acceptButton.Text = "OK"; acceptButton.Width = 100; acceptButton.Left = 50; acceptButton.Top = 80; acceptButton.Click += (object acceptSender, EventArgs acceptE) => { inputBox.Tag = input.Text; inputBox.DialogResult = System.Windows.Forms.DialogResult.OK; inputBox.Close(); }; Button cancelButton = new Button(); cancelButton.Name = "buttonNewWebDavFolderCancel"; cancelButton.Text = "Abbrechen"; cancelButton.Width = 100; cancelButton.Left = 200; cancelButton.Top = 80; cancelButton.Click += (object cancelSender, EventArgs cancelE) => { inputBox.DialogResult = System.Windows.Forms.DialogResult.Cancel; inputBox.Close(); }; inputBox.Controls.Add(acceptButton); inputBox.Controls.Add(cancelButton); DialogResult inputResult = inputBox.ShowDialog(); if (inputResult == DialogResult.OK) { if (inputBox.Tag.ToString() != String.Empty) { string folderUri = comboBoxProtocol.Text + "://" + textBoxServer.Text + "/" + this.GetSelectedFolder() + "/"; WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); IFolder folder = session.OpenFolder(folderUri); folder.CreateFolder(inputBox.Tag.ToString()); this.RefreshFolderView(); } else { MessageBox.Show("Der Ordnername kann nicht leer sein.", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information); } } break; case "toolStripMenuItemDeleteFolder": string deleteMessage = "Möchstest du das Verzeichnis (" + treeViewServer.SelectedNode.Text + ") wirklich löschen?"; string deleteCaption = "Datei löschen"; if (MessageBox.Show(deleteMessage, deleteCaption, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { string folderUri = comboBoxProtocol.Text + "://" + textBoxServer.Text + "/" + this.GetSelectedFolder() + "/"; Console.WriteLine(folderUri); WebDavSession session = new WebDavSession(); session.Credentials = new NetworkCredential(this._username, this._password); IFolder folder = session.OpenFolder(folderUri); folder.Delete(); this.RefreshFolderView(); } break; } }
public FileBrowserController() { session = WebDavSession.Create(BassAddress, T(RootConfigName), T("webDavUserName"), T("webDavPwd")); }