예제 #1
0
        /// <summary>
        /// Downlaods a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="filename">The filename</param>
        /// <returns></returns>
        public byte[] DownloadFile(FtpServerConfiguration serverConfiguration, string filename)
        {
            if (serverConfiguration == null)
            {
                throw new ArgumentNullException(nameof(serverConfiguration));
            }

            if (string.IsNullOrWhiteSpace(filename))
            {
                throw new ArgumentOutOfRangeException("Argument filename must not be null or whitespace");
            }

            using (var client = new FtpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                client.Connect();

                using (var res = new MemoryStream())
                {
                    if (!client.Download(res, filename))
                    {
                        LogManagerInstance.Instance.Error($"Could not download file `{filename}` for ftp server {serverConfiguration.InternalName}/{serverConfiguration.URI}");
                        return(null);
                    }

                    res.Position = 0;

                    return(res.ToArray());
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Renames a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="filename">The filename</param>
        /// <param name="newFilename">The new filename</param>
        /// <returns></returns>
        public bool RenameFile(FtpServerConfiguration serverConfiguration, string filename, string newFilename)
        {
            if (serverConfiguration == null)
            {
                throw new ArgumentNullException(nameof(serverConfiguration));
            }

            if (string.IsNullOrWhiteSpace(filename))
            {
                throw new ArgumentOutOfRangeException("Argument filename must not be null or whitespace");
            }

            if (string.IsNullOrWhiteSpace(newFilename))
            {
                throw new ArgumentOutOfRangeException("Argument newFilename must not be null or whitespace");
            }

            using (var client = new FtpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                client.Connect();

                client.Rename(filename, newFilename);
            }
            return(true);
        }
예제 #3
0
        /// <summary>
        /// Uploads a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuation</param>
        /// <param name="file">The file</param>
        /// <param name="path">The path</param>
        /// <param name="fileName">The filename</param>
        /// <returns></returns>
        public bool UploadFile(FtpServerConfiguration serverConfiguration, byte[] file, string path, string fileName)
        {
            if (serverConfiguration == null)
            {
                throw new ArgumentNullException(nameof(serverConfiguration));
            }

            if (string.IsNullOrWhiteSpace(fileName))
            {
                throw new ArgumentOutOfRangeException("Argument filename must not be null or whitespace");
            }

            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            using (var client = new FtpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                client.Connect();
                if (!client.DirectoryExists(path))
                {
                    client.CreateDirectory(path);
                }

                client.SetWorkingDirectory(path);
                client.Upload(file, fileName);
            }
            return(true);
        }
예제 #4
0
        /// <summary>
        /// Uploads a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="file">The file</param>
        /// <param name="path">The path</param>
        /// <param name="fileName">The file name</param>
        /// <returns></returns>
        public bool UploadFile(FtpServerConfiguration serverConfiguration, byte[] file, string path, string fileName)
        {
            if (!path.EndsWith("/"))
            {
                path = path + "/";
            }
            if (!path.StartsWith("/"))
            {
                path = "/" + path;
            }
            if (fileName.StartsWith("/"))
            {
                fileName = fileName.Substring(1, fileName.Length - 1);
            }

            var filepath = path + fileName;

            Console.WriteLine($"Begin SSH.Net upload to {serverConfiguration.URI}{filepath}");
            using (SftpClient sftp = new SftpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                if (serverConfiguration.Timeout != 0)
                {
                    sftp.OperationTimeout = TimeSpan.FromMilliseconds(serverConfiguration.Timeout);
                }

                sftp.Connect();
                using (var stream = new MemoryStream(file))
                {
                    stream.Position = 0;
                    sftp.UploadFile(stream, filepath, true);
                }
                sftp.Disconnect();
            }
            return(true);
        }
예제 #5
0
        /// <summary>
        /// Gets the directory content.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration.</param>
        /// <param name="directory">The directory</param>
        /// <returns></returns>
        public IList <string> GetDirectoryContent(FtpServerConfiguration serverConfiguration, string directory)
        {
            if (!serverConfiguration.URI.EndsWith("/") && !directory.StartsWith("/"))
            {
                directory = "/" + directory;
            }

            var request = (FtpWebRequest)WebRequest.Create(serverConfiguration.URI + directory);

            request.Method      = WebRequestMethods.Ftp.ListDirectoryDetails;
            request.UsePassive  = serverConfiguration.UsePassive;
            request.Credentials = new NetworkCredential(serverConfiguration.Username, serverConfiguration.Password);

            if (serverConfiguration.Timeout != 0)
            {
                request.Timeout = serverConfiguration.Timeout;
            }

            var response = request.GetResponse();
            var stream   = response.GetResponseStream();
            var reader   = new StreamReader(stream);
            var dir      = new List <string>();

            while (reader.Peek() >= 0)
            {
                dir.Add(reader.ReadLine());
            }

            return(dir);
        }
예제 #6
0
        /// <summary>
        /// Uploads a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuation</param>
        /// <param name="file">The file</param>
        /// <param name="path">The path</param>
        /// <param name="fileName">The filename</param>
        /// <returns></returns>
        public bool UploadFile(FtpServerConfiguration serverConfiguration, byte[] file, string path, string fileName)
        {
            if (file == null)
            {
                throw new Exception("");
            }

            var uri = serverConfiguration.URI.Trim();

            if (!string.IsNullOrWhiteSpace(fileName))
            {
                path     = path ?? "/";
                fileName = fileName ?? "";
                path     = path.Trim();
                fileName = fileName.Trim();

                if (!path.EndsWith("/"))
                {
                    path = path + "/";
                }
                if (!path.StartsWith("/"))
                {
                    path = "/" + path;
                }

                if (fileName.StartsWith("/"))
                {
                    fileName = fileName.Substring(1, fileName.Length - 1);
                }

                if (uri.EndsWith("/"))
                {
                    uri = uri.Substring(0, uri.Length - 1);
                }
            }

            var request = (FtpWebRequest)WebRequest.Create(uri + path + fileName);

            request.Method        = WebRequestMethods.Ftp.UploadFile;
            request.Credentials   = new NetworkCredential(serverConfiguration.Username, serverConfiguration.Password);
            request.ContentLength = file.Length;
            request.UsePassive    = serverConfiguration.UsePassive;
            request.UseBinary     = true;

            if (serverConfiguration.Timeout != 0)
            {
                request.Timeout = serverConfiguration.Timeout;
            }

            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(file, 0, file.Length);
            }

            return(true);
        }
예제 #7
0
 /// <summary>
 /// Deletes a file.
 /// </summary>
 /// <param name="serverConfiguration">The ftp server configuration</param>
 /// <param name="filename">The filename</param>
 /// <returns></returns>
 public bool DeleteFile(FtpServerConfiguration serverConfiguration, string filename)
 {
     using (SftpClient sftp = new SftpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
     {
         if (serverConfiguration.Timeout != 0)
         {
             sftp.OperationTimeout = TimeSpan.FromMilliseconds(serverConfiguration.Timeout);
         }
         sftp.Connect();
         sftp.DeleteFile(filename);
         sftp.Disconnect();
     }
     return(true);
 }
예제 #8
0
        /// <summary>
        /// Gets the directory content.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration.</param>
        /// <param name="directory">The directory</param>
        /// <returns></returns>
        public IList <string> GetDirectoryContent(FtpServerConfiguration serverConfiguration, string directory)
        {
            if (serverConfiguration == null)
            {
                throw new ArgumentNullException(nameof(serverConfiguration));
            }

            using (var client = new FtpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                client.Connect();

                client.SetWorkingDirectory(directory ?? "");
                return(client.GetListing().Select(x => x.FullName).ToList());
            }
        }
예제 #9
0
        /// <summary>
        /// Renames a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="filename">The filename</param>
        /// <param name="newFilename">The new filename</param>
        /// <returns></returns>
        public bool RenameFile(FtpServerConfiguration serverConfiguration, string filename, string newFilename)
        {
            var request = (FtpWebRequest)WebRequest.Create(serverConfiguration.URI + filename);

            request.Method      = WebRequestMethods.Ftp.Rename;
            request.UsePassive  = serverConfiguration.UsePassive;
            request.Credentials = new NetworkCredential(serverConfiguration.Username, serverConfiguration.Password);

            if (serverConfiguration.Timeout != 0)
            {
                request.Timeout = serverConfiguration.Timeout;
            }

            request.RenameTo = newFilename;
            request.GetResponse();

            return(true);
        }
예제 #10
0
        /// <summary>
        /// Downloads a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="filename">The filename</param>
        /// <returns></returns>
        public byte[] DownloadFile(FtpServerConfiguration serverConfiguration, string filename)
        {
            using (SftpClient sftp = new SftpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                if (serverConfiguration.Timeout != 0)
                {
                    sftp.OperationTimeout = TimeSpan.FromMilliseconds(serverConfiguration.Timeout);
                }

                sftp.Connect();
                using (var fs = new MemoryStream())
                {
                    sftp.DownloadFile(filename, fs);
                    fs.Position = 0;
                    var file = fs.ToArray();
                    sftp.Disconnect();
                    return(file);
                }
            }
        }
예제 #11
0
        /// <summary>
        /// Deletes a file.
        /// </summary>
        /// <param name="serverConfiguration">The server configuration</param>
        /// <param name="filename">The file name</param>
        /// <returns></returns>
        public bool DeleteFile(FtpServerConfiguration serverConfiguration, string filename)
        {
            if (!serverConfiguration.URI.EndsWith("/") && !filename.StartsWith("/"))
            {
                filename = "/" + filename;
            }

            var request = (FtpWebRequest)WebRequest.Create(serverConfiguration.URI + filename);

            request.Method      = WebRequestMethods.Ftp.DeleteFile;
            request.Credentials = new NetworkCredential(serverConfiguration.Username, serverConfiguration.Password);
            request.UsePassive  = serverConfiguration.UsePassive;

            if (serverConfiguration.Timeout != 0)
            {
                request.Timeout = serverConfiguration.Timeout;
            }

            request.GetResponse();
            return(true);
        }
예제 #12
0
        /// <summary>
        /// Downlaods a file.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="filename">The filename</param>
        /// <returns></returns>
        public byte[] DownloadFile(FtpServerConfiguration serverConfiguration, string filename)
        {
            if (!serverConfiguration.URI.EndsWith("/") && !filename.StartsWith("/"))
            {
                filename = "/" + filename;
            }

            var request = (FtpWebRequest)WebRequest.Create(serverConfiguration.URI + filename);

            request.Method      = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(serverConfiguration.Username, serverConfiguration.Password);
            request.UsePassive  = serverConfiguration.UsePassive;

            if (serverConfiguration.Timeout != 0)
            {
                request.Timeout = serverConfiguration.Timeout;
            }


            var stream       = request.GetResponse().GetResponseStream();
            var streamReader = new StreamReader(stream);

            return(Encoding.UTF8.GetBytes(streamReader.ReadToEnd()));
        }
예제 #13
0
        /// <summary>
        /// Gets the directory content.
        /// </summary>
        /// <param name="serverConfiguration">The ftp server configuration</param>
        /// <param name="directory">The directory</param>
        /// <returns></returns>
        public IList <string> GetDirectoryContent(FtpServerConfiguration serverConfiguration, string directory)
        {
            var filenames = new List <string>();

            using (SftpClient sftp = new SftpClient(serverConfiguration.URI, serverConfiguration.Username, serverConfiguration.Password))
            {
                if (serverConfiguration.Timeout != 0)
                {
                    sftp.OperationTimeout = TimeSpan.FromMilliseconds(serverConfiguration.Timeout);
                }

                sftp.Connect();
                var files = sftp.ListDirectory(directory);
                foreach (var file in files)
                {
                    if (file.IsRegularFile)
                    {
                        filenames.Add(file.Name);
                    }
                }
                sftp.Disconnect();
            }
            return(filenames);
        }
예제 #14
0
 /// <summary>
 /// Saves a ftp server configuration
 /// </summary>
 /// <param name="obj">A ftp server configuration</param>
 /// <returns></returns>
 public bool Save(FtpServerConfiguration obj)
 {
     return(ftpServerRepository.Save(obj));
 }
예제 #15
0
 /// <summary>
 /// Deletes a ftp server configuration.
 /// </summary>
 /// <param name="obj">The ftp server configuration</param>
 /// <returns></returns>
 public bool Delete(FtpServerConfiguration obj)
 {
     return(ftpServerRepository.Delete(obj));
 }