Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }