程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中應用PSFTP實現SFTP上傳

C#中應用PSFTP實現SFTP上傳

編輯:關於C語言

SFTP,第一次聽說,還以為是公司自己搞得一個東東呢,google了一下,原來是一種FTP協議,是可信任的FTP,類似於HTTPS協議。

這次項目就是要將一些數據文件打包通過SFTP傳到德國的Server,所以中途是需要加密傳輸的,即通過SFTP進行數據的上傳動作。

找了一個開源的東東,PSFTP,是一個綠色EXE檔,C#中控制也很方便,於是自己封裝了一下方便自己的應用。

PSFTP的命令是典型的Unix命令,很簡單易懂 ,下面是其基本的命令:

C#中使用Process調用該EXE實現FTP的上傳,參數如下:

C#中調用方式如下:

Upload#region Upload
/**//// <summary>
/// Upload the files
/// </summary>

/// <returns>output of the plugin during its running in console</returns>
public string Upload()
...
{
    string outPutMessage = ""
;
    string scriptLocation = ""
;

    //Create Script File

    scriptLocation = this.CreateScriptFile();

    Begin for ProcessStartInfo
#region Begin for ProcessStartInfo
    //Run the Upload event
    ProcessStartInfo processInfo = new ProcessStartInfo();
    //Set the Shell Command(the plugins' path)

    processInfo.FileName = this.m_ShellCommand;
    //Don't show console window

    processInfo.CreateNoWindow = true;
    //don't use shell to execute this script

    processInfo.UseShellExecute = false;      
    //Open Process Error Output

    processInfo.RedirectStandardError = true
    //Open Process Input

    processInfo.RedirectStandardInput = true
    //Open Process Output

    processInfo.RedirectStandardOutput = true;
    //Get process arguments

    string arguments = "";
    arguments += this.m_UserID + "@" + this.m_ServerName + " "; //Login Server with specifIEd userid

    arguments += "-pw " + this.m_PassWord + " "; //Login with specifIEd passWord
    arguments += "-P " + this.m_Port + " "; //Connect to specifIEd port
    arguments += "-b " + scriptLocation + " "; //use specifIEd batchfile
    arguments += "-be"; //don't stop batchfile processing if errors
    processInfo.Arguments = arguments;
    #endregion

    //Create new Process
    Process process = new Process();
    try

    ...{
        //Start execute the ProcessStartInfo

        process.StartInfo = processInfo;
        //Run the process

        process.Start();
        //
Input "y" for the psFTP's first login prompt
        //Just for the security information

        process.StandardInput.WriteLine("y");

        //
Get the return message from process(Error and Output information)
        //This message will be logged to file for debug!

        outPutMessage += process.StandardOutput.ReadToEnd();
        outPutMessage +=
 process.StandardError.ReadToEnd();
        //Wait for the process exit

        process.WaitForExit();
        //Close all the modules opened

        process.Close();
        process.Dispose();
        //Delete the script file

        File.Delete(scriptLocation);
        return
 outPutMessage;
    }

    catch(Exception ex)
    ...
{
        process.Dispose();
        //Delete the script file

        File.Delete(scriptLocation);
        throw new Exception("Error occured during upload file to remote server!"
,ex);
    }

}
#endregion

CreateScriptFile#region CreateScriptFile
/**//// <summary>
/// Create Batch Script File
/// </summary>

/// <returns>file full path</returns>
private string CreateScriptFile()
...
{
    StreamWriter fileStream;
    string scriptLocation = ""
;
    //Get the Batch Script to execute

    StringBuilder sbdScript = new StringBuilder();
    //Redirect to the default remote location

    sbdScript.Append("cd " + this.m_RemoteLocation + Environment.NewLine);
    //Upload files

    foreach(object file in this.m_UploadFiles)
    ...
{
        sbdScript.Append("put " + (string)file +
 Environment.NewLine);
    }


    
//Close the session
    sbdScript.Append("quit");
    //Save the Script to templocation

    scriptLocation = this.m_TempLocation + @"" + System.Guid.NewGuid().ToString() + ".scr";

    try

    ...{                
        fileStream = new
 StreamWriter(scriptLocation);
        fileStream.Write(sbdScript.ToString());
        fileStream.Close();
    }

    catch(Exception ex)
    ...
{
        fileStream = null
;
        throw new Exception("Error occured during create script file!"
,ex);
    }

    return scriptLocation;
}

#endregion
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved