/// <summary> /// Передать локальный файл на удаленый сервер /// </summary> /// <param name="LocalFile">Полный путь к локальному файлу</param> /// <param name="RemoteFile">Полный путь к удаленому файлу</param> /// <param name="EncryptionAES">Использовать шифрование AES 256</param> /// <param name="PasswdAES">Пароль для шифрования файлов</param> public bool UploadFile(string LocalFile, string RemoteFile, bool EncryptionAES, string PasswdAES, out long FileSizeToAES) { FileSizeToAES = -1; try { #region EncryptionAES = true if (EncryptionAES) { using (var сryptoBox = new CryptoBox(PasswdAES, LocalFile)) { using (var FileStream = сryptoBox.OpenRead(out string error)) { if (FileStream == null) { report.UploadFile(LocalFile, RemoteFile, EncryptionAES, error); return(false); } // Новое расширение файла FileSizeToAES = FileStream.Length; string NewRemoteFile = Regex.Replace(RemoteFile, "([0-9]+)$", FileSizeToAES.ToString()); // Заливаем на нужный сервер switch (typeSunc) { #region SFTP case TypeSunc.SFTP: { sftp.UploadFile(FileStream, NewRemoteFile, true); return(true); } #endregion #region OneDrive case TypeSunc.OneDrive: { oneDrive.UploadFile(FileStream, Path.GetFileName(NewRemoteFile), Path.GetDirectoryName(NewRemoteFile)).Wait(); return(true); } #endregion #region FTP case TypeSunc.FTP: { ftp.Upload(FileStream, NewRemoteFile, FtpExists.Overwrite, true); return(true); } #endregion #region WebDav case TypeSunc.WebDav: { var res = webDav.PutFile(NewRemoteFile, FileStream).Result; if (res.IsSuccessful) { return(true); } report.UploadFile(LocalFile, NewRemoteFile, EncryptionAES, res); return(false); } #endregion } } } } #endregion #region EncryptionAES = false else { switch (typeSunc) { #region SFTP case TypeSunc.SFTP: { using (var file = File.OpenRead(LocalFile)) { sftp.UploadFile(file, RemoteFile, true); } return(true); } #endregion #region FTP case TypeSunc.FTP: { using (var LocalFileStream = File.OpenRead(LocalFile)) { ftp.Upload(LocalFileStream, RemoteFile, FtpExists.Overwrite, true); } return(true); } #endregion #region WebDav case TypeSunc.WebDav: { using (var file = File.OpenRead(LocalFile)) { var res = webDav.PutFile(RemoteFile, file).Result; if (res.IsSuccessful) { return(true); } report.UploadFile(LocalFile, RemoteFile, EncryptionAES, res); return(false); } } #endregion #region OneDrive case TypeSunc.OneDrive: { oneDrive.UploadFileAs(LocalFile, Path.GetFileName(RemoteFile), Path.GetDirectoryName(RemoteFile)).Wait(); return(true); } #endregion } } #endregion } catch (Exception ex) { report.UploadFile(LocalFile, RemoteFile, EncryptionAES, ex.ToString()); } return(false); }
/// <summary> /// Загрузить файл с удаленого сервера /// </summary> /// <param name="LocalFile">Полный путь к локальному файлу</param> /// <param name="RemoteFile">Полный путь к удаленому файлу</param> /// <param name="EncryptionAES">Использовать шифрование AES 256</param> /// <param name="PasswdAES">Пароль для шифрования файлов</param> /// <param name="FileSize">Размер файла</param> public bool DownloadFile(string LocalFile, string RemoteFile, bool EncryptionAES, string PasswdAES, long FileSize) { // Временный файл string tmpFile = $"{Folders.Temp.SyncBackup}/{md5.text(RemoteFile)}"; // Путь к конечному файлу string targetFile = EncryptionAES ? tmpFile : LocalFile; try { #region Удаляем файлы для перезаписи if (File.Exists(LocalFile)) { File.Delete(LocalFile); } if (File.Exists(tmpFile)) { File.Delete(tmpFile); } #endregion #region Загружаем файл switch (typeSunc) { case TypeSunc.SFTP: { using (FileStream LocalStream = new FileStream(targetFile, FileMode.Create, FileAccess.Write)) { sftp.DownloadFile(RemoteFile, LocalStream); break; } } case TypeSunc.FTP: { ftp.DownloadFile(targetFile, RemoteFile, overwrite: true); break; } case TypeSunc.OneDrive: { var item = oneDrive.GetItem(RemoteFile).Result; if (item == null) { report.DownloadFile(targetFile, RemoteFile, EncryptionAES, FileSize, "OneDrive.GetItem(RemoteFile) == null"); return(false); } oneDrive.DownloadItemAndSaveAs(item, targetFile).Wait(); break; } case TypeSunc.WebDav: { var res = webDav.GetRawFile(RemoteFile).Result; if (!res.IsSuccessful) { report.DownloadFile(targetFile, RemoteFile, EncryptionAES, FileSize, (res.Description, res.StatusCode)); return(false); } using (FileStream LocalStream = new FileStream(targetFile, FileMode.Create, FileAccess.Write)) { CopyStream(res.Stream, LocalStream, FileSize); break; } } } #endregion #region CryptoBox if (EncryptionAES) { using (var сryptoBox = new CryptoBox(PasswdAES, LocalFile, _tmpFile: tmpFile)) { if (!сryptoBox.Decrypt(out string error)) { report.DownloadFile(LocalFile, RemoteFile, EncryptionAES, FileSize, error); return(false); } } } #endregion return(true); } catch (Exception ex) { report.DownloadFile(targetFile, RemoteFile, EncryptionAES, FileSize, ex.ToString()); } return(false); }
/// <summary> /// Загрузить файл с удаленого сервера /// </summary> /// <param name="LocalFile">Полный путь к локальному файлу</param> /// <param name="RemoteFile">Полный путь к удаленому файлу</param> /// <param name="EncryptionAES">Использовать шифрование AES 256</param> /// <param name="PasswdAES">Пароль для шифрования файлов</param> /// <param name="FileSize">Размер файла</param> public bool DownloadFile(string LocalFile, string RemoteFile, bool EncryptionAES, string PasswdAES, long FileSize) { try { // Удаляем локальный файлл если он есть if (File.Exists(LocalFile)) { File.Delete(LocalFile); } // Открываем локальный файл using (var LocalStream = File.OpenWrite(LocalFile)) { #region Получаем поток файла на сервере Stream RemoteStream = null; switch (typeSunc) { case TypeSunc.SFTP: { RemoteStream = sftp.OpenRead(RemoteFile); break; } case TypeSunc.FTP: { RemoteStream = ftp.OpenRead(RemoteFile); break; } case TypeSunc.OneDrive: { var item = oneDrive.GetItem(RemoteFile).Result; if (item == null) { return(false); } report.DownloadFile(LocalFile, RemoteFile, EncryptionAES, FileSize, "OneDrive.GetItem(RemoteFile) == null"); RemoteStream = oneDrive.DownloadItem(item).Result; break; } case TypeSunc.WebDav: { var res = webDav.GetRawFile(RemoteFile).Result; if (!res.IsSuccessful) { report.DownloadFile(LocalFile, RemoteFile, EncryptionAES, FileSize, (res.Description, res.StatusCode)); return(false); } RemoteStream = res.Stream; break; } } #endregion if (EncryptionAES) { var cry = new CryptoBox(PasswdAES); if (!cry.Decrypt(RemoteStream, LocalStream, FileSize, out string error)) { report.DownloadFile(LocalFile, RemoteFile, EncryptionAES, FileSize, error); return(false); } } else { CopyStream(RemoteStream, LocalStream, FileSize); } RemoteStream?.Close(); if (typeSunc == TypeSunc.FTP) { ftp?.GetReply(); } return(true); } } catch (Exception ex) { report.DownloadFile(LocalFile, RemoteFile, EncryptionAES, FileSize, ex.ToString()); } return(false); }