首页 > 开发 > 综合 > 正文

C#中应用PSFTP实现SFTP上传

2024-07-21 02:26:58
字体:
来源:转载
供稿:网友

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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表