示例#1
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);
        }
示例#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)
        {
            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);
        }