C# 直接访问sftp进行相应的操作

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using  Tamir.SharpSsh;
using Tamir.SharpSsh.jsch;
using System.Collections;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.IO;
using System.Threading;
using System.Data;

namespace sftpTest
{

    public class SFTPHelper
    {
        private Session m_session;
        private Channel m_channel;
        private ChannelSftp m_sftp;
        private string user;
        private string ip;
        private int  port;
        private string pwd;

        private string defRemotePath = "/xxx/xxx/";
        public bool nameSame;
        public bool mkdirSuccess;
        public bool mksubdirSuccess;
        public int fileLength;

        private MySqlTransaction myTrans;
        private MySqlCommand mycom;
        private DataSet dsShot = new DataSet();

        public List<string> msgList = new List<string>();
        MySQL mySql = new MySQL();
        JSch jsch = new JSch();   //利用java实现的通讯包

        public SFTPHelper()
        {
            user = "xxx";
            ip = "xxx.xxx.x.xxx";
            port = 22;
            pwd = "xxxxxx";

           
        }


        //host:sftp地址   user:用户名   pwd:密码          
        public SFTPHelper(string host, string user, string pwd)
        {
            string[] arr = host.Split(':');
            string ip = arr[0];
            int port = 22;
            if (arr.Length > 1) port = Int32.Parse(arr[1]);

        }

        //SFTP连接状态          
        public bool Connected { get { return m_session.isConnected(); } }

        //连接SFTP          
        public bool ConnectSftp()
        {
            try
            {
                m_session = jsch.getSession(user, ip, port);
                m_session.setHost(ip);
                MyUserInfo ui = new MyUserInfo();
                ui.setPassword(pwd);
                m_session.setUserInfo(ui);

                if (!Connected)
                {
                    m_session.connect();
                    m_channel = m_session.openChannel("sftp");
                    m_channel.connect();
                    m_sftp = (ChannelSftp)m_channel;
                    
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

        //断开SFTP          
        public void DisconnectSftp()
        {
            if (Connected)
            {
                m_channel.disconnect();
                m_session.disconnect();
            }
        }

        public bool JudgeDirExit(string proName,string dirName)
        {
            Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(defRemotePath + proName);
            foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry fileName in vvv)
            {
                string name = fileName.getFilename();
                if (name == dirName)
                {
                    return true;
                  
                }

            }
            return false;

        }


        public void Mkdir(string dirName)
        {
            Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(defRemotePath.Remove(defRemotePath.LastIndexOf("/")));
            nameSame = false;
            foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry fileName in vvv)
            {
                string name = fileName.getFilename();
                if (name == dirName)
                {
                    nameSame = true;
                    MessageBox.Show("专案名重复,请重新再取!","警告!");
                    break;
                }

            }
            if (!nameSame)
            {
                m_sftp.mkdir(defRemotePath + dirName);
                mkdirSuccess = true;   

            }

        }

        public bool MkSubdir(string parentDir, string subDir)
        {
            if (mkdirSuccess&!nameSame)
            {
                m_sftp.mkdir(defRemotePath + parentDir + "/" + subDir);
                return true;
            }
            return false;
        }


        //SFTP存放文件          
        public bool Put(string localPath, string remotePath)
        {
            try
            {
                Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
                Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(remotePath);
                m_sftp.put(src, dst);
              
                return true;
            }
            catch
            {
                return false;
            }
        }
         //第一次导图
        public bool Put(string localPath, string localFileName, string proName, string remoteDirName)
        {
 
            Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath + @"\" + localFileName);   
            Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(defRemotePath + proName + "/" + remoteDirName + "/");
            try
            {
                m_sftp.put(src, dst);
                return true;
            }
            catch
            {
                return false;
            }

        }

         //续传图片
        public bool Put(string localFileName, string proName, string remoteDirName)
        {

            Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localFileName);
            Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(defRemotePath + proName + "/" + remoteDirName + "/");
            try
            {
                m_sftp.put(src, dst);
                return true;
            }
            catch
            {
                return false;
            }

        }
          /// <summary>
          /// 数据库插入专案和镜头信息
          /// </summary>
          /// <param name="proName">专案名</param>
        public void PutInsertAddr_Pro(string proName)
        {
            #region//插入专案 镜头信息
            mySql.GetConn();
            mySql.myConn.Open();
            if (mySql.myConn.State.ToString() == "Open")
            {
                try
                {
                    string insertCmd = "INSERT INTO u_project (pro_id,pro_name,pro_visible,pro_psdate,pro_pedate,pro_asdate,pro_aedate,pro_priority,pro_cover,pro_status,pro_createby,pro_manager,pro_createtime,pro_lownum,pro_length,pro_fps,pro_width,pro_height)VALUES ('','" + proName + "',1,NOW(),NOW(),NOW(),NOW(),100,'','on',1,1,NOW(),0,0,0,0,0);";
                    insertCmd += "INSERT INTO u_shot(shot_id,shot_manager,shot_num,shot_cover,shot_priority,shot_lock,shot_pro) VALUES('',121,1,'',100,0,(SELECT pro_id FROM u_project WHERE pro_name='" + proName + "'));";
                    myTrans = mySql.myConn.BeginTransaction();
                    mycom = new MySqlCommand(insertCmd, mySql.myConn);
                    mycom.Transaction = myTrans;
                    try
                    {
                        mycom.ExecuteNonQuery();
                        myTrans.Commit();
                        mkdirSuccess = true;
                    }
                    catch
                    {
                        try { myTrans.Rollback(); MessageBox.Show("专案插入信息错误,数据进行了回滚", "u_project"); }
                        catch (MySqlException ex)
                        {
                            if (myTrans.Connection != null)
                            { MessageBox.Show("回滚失败! 异常类型: " + ex.GetType()); }
                        }
                    }
                    finally
                    {
                        mycom.Dispose();
                        myTrans.Dispose();
                    }

                }
                catch (Exception e)
                {
                    mkdirSuccess = false;
                    MessageBox.Show("专案、镜头插入信息语句错误"+e.Message);
                }
                finally
                {
                    mySql.myConn.Close();
                    mySql.myConn.Dispose();

                }
                MessageBox.Show("专案、镜头插入信息完毕!");
            }
            #endregion
        }

        /// <summary>
        /// 数据库插入图片信息
        /// </summary>
        /// <param name="proName">专案名</param>
        /// <param name="localPath">本地图片文件夹地址</param>
        public void PutInsertAddr_Pic(string proName,string localPath)
        {
            mySql.GetConn();
            mySql.myConn.Open();
            if (mySql.myConn.State.ToString() == "Open")
            {
                DirectoryInfo dirInfo = new DirectoryInfo(localPath);
                FileInfo[] fi = dirInfo.GetFiles();

                string insertAddr = "START TRANSACTION";
                mycom = new MySqlCommand(insertAddr, mySql.myConn);
                mycom.ExecuteNonQuery();
                try
                {
                    foreach (FileInfo file in fi)
                    {
                        string name = file.Name;

                        insertAddr = "INSERT INTO u_picture (pic_id,pro_id,pic_num,pic_type,pic_status,pic_priority,pic_shot,pic_savetime,pic_version,pic_score,pic_lock,pic_reviewer,pic_painter,pic_thum,pic_addr,pic_crc,pic_background,pic_worktime) VALUES('',(SELECT pro_id FROM u_project WHERE pro_name='" + proName + "'),'" + name.Remove(name.IndexOf(".")) + "','depth map','new',100,(SELECT shot_id FROM u_shot WHERE shot_pro=(SELECT pro_id FROM u_project WHERE pro_name='" + proName + "')),'1990-01-01 00:00:00',1,0,0,121,121,'" + proName + "/thum/" + file.Name + "','" + proName + "/ori/" + name + "','OFF','no',0)";
                        mycom = new MySqlCommand(insertAddr, mySql.myConn);
                        mycom.ExecuteNonQuery();

                    }
                    insertAddr = "COMMIT";
                    mycom = new MySqlCommand(insertAddr, mySql.myConn);
                    mycom.ExecuteNonQuery();

                  
                   
                }
                catch (Exception ee)
                {
                    insertAddr = "ROLLBACK";
                    mycom = new MySqlCommand(insertAddr, mySql.myConn);
                    mycom.ExecuteNonQuery();
                    MessageBox.Show("图片信息插入失败!", "图片地址插入错误!" + ee.Message);
                }    
                MessageBox.Show("图片信息插入完毕!");
            }
            mySql.myConn.Close();
            mySql.myConn.Dispose();   
            mycom.Dispose();
        }

         /// <summary>
         /// 数据库增加镜头信息
         /// </summary>
         /// <param name="modifyProName">指定专案名</param>
        public void PutAddShot(string modifyProName)
        {
            mySql.GetConn();
            mySql.myConn.Open();
            if (mySql.myConn.State.ToString() == "Open")
            {
                string  insertShotCmd = "INSERT INTO u_shot(shot_id,shot_manager,shot_num,shot_cover,shot_priority,shot_lock,shot_pro) VALUES('',121,1,'',100,0,(SELECT pro_id FROM u_project WHERE pro_name='" + modifyProName + "'))";
                mycom = new MySqlCommand(insertShotCmd, mySql.myConn);
                try
                {
                    mycom.ExecuteNonQuery();
                }
                catch (Exception ef)
                {
                    MessageBox.Show("镜头新增信息失败!"+ef.Message);
                }
            }
            mycom.Dispose();
            mySql.myConn.Close();
            mySql.myConn.Dispose();
            
        }


        /// <summary>
        /// 在数据库更加镜头封面
        /// </summary>
        /// <param name="proName">专案名</param>
        /// <param name="thumName">缩略图文件名</param>
        /// <returns></returns>
        public bool PutInsertShotCover(string proName,string thumName)
        {
            Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(defRemotePath + proName+"/"+thumName);
            foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry fileName in vvv)
            {
                string name = fileName.getFilename();
                mySql.GetConn();
                mySql.myConn.Open();
                if (mySql.myConn.State.ToString() == "Open")
                {
                    string modfiyShot = "SELECT shot_id ,shot_cover FROM u_shot WHERE shot_pro=(SELECT pro_id FROM u_project WHERE pro_name='" + proName + "') ORDER BY shot_id DESC";
                    MySqlDataAdapter myada = new MySqlDataAdapter(modfiyShot,mySql.myConn);
                    dsShot.Clear();
                    myada.Fill(dsShot,"shotID");   //查出该专案的最新shotID,导入图片后shotID最大。
                    myada.Dispose();
                    int shotid =Convert.ToInt32(dsShot.Tables["shotID"].Rows[0]["shot_id"]);
                    string updateShotAddr = "update u_shot set shot_cover='" + proName + "/" + thumName + "/" + name + "' where shot_id='" + shotid + "' and shot_pro=(SELECT pro_id FROM u_project WHERE pro_name='" + proName + "')";
                    mycom = new MySqlCommand(updateShotAddr, mySql.myConn);
                    mycom.ExecuteNonQuery();
                    mycom.Dispose();
                }
                mySql.myConn.Close();
                mySql.myConn.Dispose();
                return true;
            }
            return false;
        }



        //SFTP获取文件          
        public bool Get(string remotePath, string localPath)
        {
            try
            {
                Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(remotePath);
                Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
                m_sftp.get(src, dst);
                return true;
            }
            catch
            {
                return false;
            }
        }
        //删除SFTP文件  
        public bool Delete(string remoteFile)
        {
            try
            {
                m_sftp.rm(remoteFile);
                return true;
            }
            catch
            {
                return false;
            }
        }

        //获取SFTP文件列表          
        public ArrayList GetFileList(string remotePath, string fileType)
        {
            try
            {
                Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath);
                ArrayList objList = new ArrayList();
                foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
                {
                    string sss = qqq.getFilename();
                    if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length))
                    { objList.Add(sss); }
                    else { continue; }
                }

                return objList;
            }
            catch
            {
                return null;
            }
        }


        //登录验证信息          
        public class MyUserInfo : UserInfo
        {
            String passwd;
            public String getPassword() { return passwd; }
            public void setPassword(String passwd) { this.passwd = passwd; }

            public String getPassphrase() { return null; }
            public bool promptPassphrase(String message) { return true; }

            public bool promptPassword(String message) { return true; }
            public bool promptYesNo(String message) { return true; }
            public void showMessage(String message) { }
        }
    }
}



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值