Cách download, upload file lên ftp sử dụng SftpClient Renci.SshNet

1/19/2021 11:21 AM | Lập trình

Hôm nay mình sẽ hướng dẫn các bạn thao tác check exits folder, file, cách upload file, download file, delete file từ ftp về máy local sử dụng thư viện SftpClient Renci.SshNet trong c#

Giới thiệu

Giao thức truyền tệp an toàn (SFTP) là một trong những cách tiếp cận để tải lên máy chủ từ xa qua kết nối an toàn và được mã hóa. Trong .NET, chúng ta có thể dễ dàng phát triển một tiện ích để thực hiện tác vụ đã đề cập.

Đối với điều này, tất cả những gì chúng ta cần làm là sử dụng một assembly có tên là SSH.NET. SSH.NET là một thư viện Secure Shell (SSH) cho.NET, được tối ưu hóa cho song song và hỗ trợ khuôn khổ rộng.

Chúng ta có thể cài đặt thư viện này bằng cách thực hiện lệnh sau trong bảng điều khiển trình quản lý gói theo các bước sau

1. Click phải vào dự án muốn thêm chọn Manage NuGet Package...

2. Nhập SSH và click install như hình

Vậy là bạn đã cài đặt thành công gói package SSH.NET

Bây giờ code thôi. Bài toán đặt ra là mình sẽ up một file lên server. Server này có các thông tin như ip, port, username, pass.

Và mình sẽ làm như sau: 

1. Check tồn tại folder

2. Tạo folder

3. Check tồn tại file

4. Xóa file

5. Upload file từ local lên ftp

Trong hàm xử lý chính của mình sẽ như sau:

Các thông tin về username, pass, ip, port mình sẽ để trong config và lấy ra như trên. 

Code detail:

 string username = ConfigurationManager.AppSettings["ftpUsername"].ToString();
            string password = ConfigurationManager.AppSettings["ftpPassword"].ToString();
            string ftp = ConfigurationManager.AppSettings["ftpHost"].ToString();
            int port = Convert.ToInt32(ConfigurationManager.AppSettings["ftpPort"].ToString());

            if (CheckIfFileExistsOnServer(ftp, port, folder, username, password))
            {
                //check file exists
                string files = folder + "/" + fileName + ".csv";
                if (CheckIfFileExistsOnServer(ftp, port, files, username, password))
                {
                    DeleteFile(ftp, port, files, username, password);
                }

                //upload file to ftp
                UploadFileToFtp(ftp, port, finalPath, folder, fileName, username, password);
            }
            else
            {
                CreateDirectoryPathFtp(ftp, port, folder, fileName, username, password);
                //move file to ftp
                UploadFileToFtp(ftp, port, finalPath, folder, fileName, username, password);
            }

Hàm xử lý kiểm tra folder, file tồn tại

Code Detail: 

private bool CheckIfFileExistsOnServer(string ftp, int port, string folder, string username, string password)
        {
            using (var sftp = new SftpClient(ftp, port, username, password))
            {
                try
                {
                    sftp.Connect();
                    return sftp.Exists(folder);
                }
                catch (Exception ex)
                {
                    throw ex;
                    return false;
                }
            }
        }

Hàm xóa files, folder

Code Detail:

public bool DeleteFileFromFolder(string ftp, int port, string pathfolder, string username, string password)
        {
            using (var sftp = new SftpClient(ftp, port, username, password))
            {

                sftp.Connect();
                var files = sftp.ListDirectory(pathfolder);
                string pathFiles = "";
                foreach (var file in files)
                {
                    if (file.Length > 0)
                    {
                        pathFiles = pathfolder + "/" + file.Name;
                        if (!string.IsNullOrEmpty(pathFiles))
                        {
                            sftp.DeleteFile(pathFiles);
                        }
                    }

                }
                return true;

            }
        }

Hàm Upload file lên server ftp

Code Detail:

public static void UploadFileToFtp(string ftp, int port, string localFiles, string remoteFilePath, string fileName, string username, string password)
        {
            using (var sftp = new SftpClient(ftp, port, username, password))
            {
                try
                {
                    sftp.Connect();

                    using (Stream localFile = File.OpenRead(localFiles))
                    {
                        string pathDestination = "/" + remoteFilePath + "/" + fileName + ".csv";
                        sftp.UploadFile(localFile, pathDestination);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }

Hàm download file từ ftp

Code Detail:

public static bool DownloadFileFromFtp(string ftp, int port, string localPath, string remoteFilePath, string username, string password)
        {
            using (var sftp = new SftpClient(ftp, port, username, password))
            {
                sftp.Connect();
                var files = sftp.ListDirectory(remoteFilePath);
                string localFiles = "";
                foreach (var file in files)
                {
                    if (file.Length > 0)
                    {
                        localFiles = localPath + file.Name;
                        if (!string.IsNullOrEmpty(localFiles))
                        {
                            if (File.Exists(localFiles))
                            {
                                File.Delete(localFiles);
                            }
                            using (Stream localFile = File.OpenWrite(localFiles))
                            {

                                string pathDestination = "/" + remoteFilePath + "/" + file.Name;
                                sftp.DownloadFile(pathDestination, localFile);
                            }
                        }
                    }

                }
            }
            return true;
        }

Hàm tạo path folder trên server ftp

Code Detail:

public static void CreateDirectoryPathFtp(string ftp, int port, string folder, string fileName, string username, string password)
        {
            using (var sftp = new SftpClient(ftp, port, username, password))
            {
                try
                {
                    sftp.Connect();
                    sftp.CreateDirectory(folder);

                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }

 

Hy vọng qua bài viết này sẽ giúp các bạn có thể thao tác check tồn tại, download file, upload file. Cảm ơn các bạn theo dõi.

Bài viết liên quan: 

Cách import data csv vào sql server sử dụng c# (Import csv to sql server c#)

Cách xuất file csv từ list object sử dụng c# (Export list object to csv c#)

 

Tin tức khác

  • CDN là gì? Khi nào thì cần xài CDN cho website

    CDN là gì? Khi nào thì cần xài CDN cho website

    Thuật ngữ CDN có thể bạn sẽ bắt gặp khá nhiều bài viết trên thachpham.com, hoặc khi bạn cần một người có kinh nghiệm tư vấn giải pháp tiết kiệm băng thông máy chủ và tăng tốc độ website đều sẽ được nghe tư vấn là sử dụng CDN. Vậy CDN chính xác là cái gì, có bao nhiêu loại CDN, và website của bạn có thích hợp để sử dụng CDN không thì bài này sẽ cung cấp cho bạn các thông tin cần thiết đó.

  • Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Môi trường internet phát triển, kéo theo tội phạm mạng tăng cao, vì thế cần có những chuẩn bảo mật web cao hơn. Đó là lí do giao thức HTTPS dần thay thế hoàn toàn HTTP. Vậy, giao thức HTTPS là gì? HTTP và HTTPS khác nhau như thế nào? Và tại sao các website nên dùng HTTPS thay vì HTTP? Bài viết này sẽ giúp bạn giải đáp tất cả những thắc mắc đó.

  • Tích hợp zalo vào website.

    Tích hợp zalo vào website.

    Nếu bạn là một người có website bán hàng thì việc liên hệ thuận lợi nhanh cho khách hàng luôn là ưu tiên hàng đầu. Cũng chính vì lí dó này mình đã tìm hiểu sau khi chèn cho website của mình. Thấy hay nên chia sẻ cho mọi người có nhu cầu.

  • Cách dựng 1 website bằng iis.

    Cách dựng 1 website bằng iis.

    Có rất nhiều bạn làm web nhưng lại không biết cách build 1 site trên iis. Nên hôm nay mình sẽ chia sẻ các bước đơn giản để có thể dễ dàng tạo được 1 trang web bằng iis trên  server windows.

  • Build site PHP trên server windows.

    Build site PHP trên server windows.

    Mình đang quản trị các website asp.net nên việc build một website wordpress lên vps của mình gặp rất nhiều khó khăn. Và mình hỏi còn gặp những ý kiến như không thể build php và asp.net trên cùng một môi trường. Nhưng hôm nay mình đã làm được và chia sẻ lại cho mọi người. Nếu vẫn gặp khó khăn thì inbox cho mình nha. Thông tin nằm ở footer trang web.

  • Upload hình ảnh trong ckeditor asp.net

    Upload hình ảnh trong ckeditor asp.net

    Mình làm dự án và khách hàng yêu cầu thêm chức năng trong ckeditor. Nên cũng đọc, tìm kiếm share lại cho anh em có nhu cầu sử dụng nhé.

  • Microservice là gì? Ưu nhược điểm khi xài Microservice.

    Microservice là gì? Ưu nhược điểm khi xài Microservice.

    Hôm bữa mình có viết 1 bài về tổng quan về abp framwork. Trong framework này cũng có nhắc tới cách sử dụng và demo về microservice. Hôm nay mình sẽ chia sẻ chi tiết hơn về microservice. Mọi người xem nhé