.net 对sftp服务器上文件的操作

由于服务商从FTP服务器迁移到SFTP服务器,唉~~~,苦逼的我们就改来该去的吧。现在来稍微说说这个是怎么实现的。

----------------------------------------我是无耻的分割线------------------------------------------------------------

就不赘述FTP和SFTP的区别了,只提一点在一定的程度上后者更安全,需要的同学请移步http://www.cnblogs.com/mfryf/archive/2013/05/29/3107286.html了解更多,谢谢!

好了,既然要到服务器上去操作文件,我们首先要登陆服务器,就像登陆其他服务器一样,我们需要一个地址、用户名、密码,可能还需要一个端口号。

这里我是借助于一个第三方的插件,SharpSSH 1.1.1.13,这是地址http://www.tamirgal.com/blog/page/SharpSSH.aspx(可以自行下载)。

--需要引用的dll

using Tamir.SharpSsh;
using AmazonASNService.BLL;


class sftpHelp
    {

        private SshTransferProtocolBase m_sshCp;
        private sftpHelp()
        {

        }
        public sftpHelp(SshConnectionInfo connectionInfo)
        {
            m_sshCp = new Sftp(connectionInfo.Host, connectionInfo.User);

            if (connectionInfo.Pass != null)
            {
                m_sshCp.Password = connectionInfo.Pass;
            }

            if (connectionInfo.IdentityFile != null)
            {
                m_sshCp.AddIdentityFile(connectionInfo.IdentityFile);
            }
        }

        public bool Connected
        {
            get
            {
                return m_sshCp.Connected;
            }
        }
        public void Connect()
        {
            if (!m_sshCp.Connected)
            {
                m_sshCp.Connect();
            }
        }
        public void Close()
        {
            if (m_sshCp.Connected)
            {
                m_sshCp.Close();
            }
        }

        //上传
        public bool Upload(string localPath, string remotePath,int port)
        {
            try
            {
                if (!m_sshCp.Connected)
                {
                    m_sshCp.Connect(port);//如果没有端口号的话可以忽略
                }
                m_sshCp.Put(localPath, remotePath);

                return true;
            }
            catch
            {
                return false;
            }

        }
        //下载
        public bool Download(string remotePath, string localPath,int port)
        {
            try
            {
                if (!m_sshCp.Connected)
                {
                    m_sshCp.Connect(port);
                }

                m_sshCp.Get(remotePath, localPath);

                return true;
            }
            catch
            {
                return false;
            }
        }
        public bool Delete(string remotePath)
        {
            try
            {
                if (!m_sshCp.Connected)
                {
                    m_sshCp.Connect();
                }
                ((Sftp)m_sshCp).Delete(remotePath);//刚刚新增的Delete方法

                return true;
            }
            catch
            {
                return false;
            }
        }

        public ArrayList GetFileList(string path,int port)
        {
            try
            {
                if (!m_sshCp.Connected)
                {
                    m_sshCp.Connect(port);
                }
                return ((Sftp)m_sshCp).GetFileList(path);
            }
            catch(Exception ex)
            {
                return null;
            }
        }
    }

   /// <summary>
        /// sftp上传文件
        /// </summary>
        private static void UploadSftp()
        {
            SshConnectionInfo objInfo = new SshConnectionInfo();
            objInfo.User = ftpUserID;
            objInfo.Host = ftpServerIP;
            objInfo.Pass = ftpPassword; //基于密码
            sftpHelp objSFTPHelper = new sftpHelp(objInfo);
            string[] strFiles = Directory.GetFiles(poapath);
            if (strFiles != null)
            {
               foreach (string strFile in strFiles)
                {
                    if ( objSFTPHelper.Upload(strFile, ftpDir,2222))//开始上传
                    {
                        File.Delete(strFile);
                    }
                }
            }

        }

   /// <summary>
        /// 2.从SFTP获取文件到指定目录
        /// </summary>
        private static void DownSFTPFile() {
            SshConnectionInfo SsInfo=new SshConnectionInfo();
            SsInfo.User = ftpUserID;
            SsInfo.Host = ftpServerIP;
            //SsInfo.IdentityFile = "key"; //有2中认证,一种基于PrivateKey,一种基于password
            SsInfo.Pass = ftpPassword; //基于密码
            sftpHelp sftpDown = new sftpHelp(SsInfo);
            ArrayList FileList = sftpDown.GetFileList(ftpPath,2222);
            if (FileList != null)
            {
                for (int i = 0; i < FileList.Count; i++)
                {
                    string sfileName = ftpPath + "/" + FileList[i];
                    if (sftpDown.Download(sfileName, downPath,2222))
                    {
                        sftpDown.Delete(sfileName,2222);
                    }
                }
            }
          }

时间: 2024-08-11 01:34:28

.net 对sftp服务器上文件的操作的相关文章

定时登录下载sftp服务器上的某些有规则的文件

[[email protected] duizhangdan]# cat wget.sh #!/bin/bash#定时下载sina sftp服务器上的bak_dir=`date -d"5 day ago" +"%F"`tom_day=`date -d"5 day ago" +"%Y%m%d"`mkdir -p /data/duizhangdan/${bak_dir} sftp -oIdentityFile=/data/java

java实现客户端向服务器发送文件的操作

服务器源代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket;

java 通过sftp服务器上传下载删除文件

最近做了一个sftp服务器文件下载的功能,mark一下: 首先是一个SftpClientUtil 类,封装了对sftp服务器文件上传.下载.删除的方法 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; impor

SaltStack 模块学习之拷贝master服务器上文件和目录到minion服务器

一. cp.get_file实现从master端复制文件到minion服务器的文件中cp.get_file 1. 修改/etc/salt/master ,指定server 工作的根目录   file-roots:       - base:              /srv/salt  (默认路径,可以指定)2 . 创建目录     mkdir /srv/salt 3. 拷贝需要复制的文件到工作目录   cp -ra souce_file /srv/salt4. 执行cp.get_file 命

如何验证远程服务器上文件是否存在

java.net.URL url = null; java.net.URLConnection urlCon; try { url = new java.net.URL("http://服务器IP:端口/upload/ABC.doc"); urlCon = url.openConnection(); String message = urlCon.getHeaderField(0); System.out.println(message);//文件存在打印'HTTP/1.1 200 O

Java判断远程服务器上文件是否存在(跨服务器)

方法一: URL serverUrl = new URL("http://localhost:8090/Demo/clean.sql"); HttpURLConnection urlcon = (HttpURLConnection) serverUrl.openConnection(); String message = urlcon.getHeaderField(0); if (StringUtils.hasText(message) && message.start

C# 判断服务器上文件是否存在

var path = " FramePath" ; var filePath = Server.MapPath(path); if (System.IO.File.Exists(filePath)) { var fileName = Path.GetFileName(filePath); FileInfo info = new FileInfo(filePath); Response.Clear(); Response.ClearHeaders(); Response.Buffer =

Java通过FTP服务器上传下载文件的解决方案

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到F

如何直接处理FTP服务器上的压缩文件?

我最近要写一个供有相关权限的管理人员查询大额资金明细的程序,界面如下: 所需的数据文件是放在报表服务器上,每天一个压缩文件,该压缩文件中除了所需的储蓄流水账文件外,还有很多其他的文件.如果先把该压缩文件从报表服务器下载到应用服务器上,再进行解压缩处理的话,一是多下载了该压缩文件中我们不需要的其他文件,二是还必须在应用服务器上建立以SessionID等方法标识的临时文件,以免其他用户也在进行查询时文件名冲突,三是使用完毕后还必须删除该临时文件. 我的处理方法是如下: using (ZipInput