当前位置:首页 > Windows程序 > 正文

FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输

2021-03-26 Windows程序

fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下。

主要是记录新接触的sftp文件上传。服务器环境下使用freesshd搭建好环境后,windos环境下可视化工具filezilla可#以很容易实现文件的传输。

本例中主要是c#使用Renci.SshNet.dll实现SFTP文件传输。

代码如下:

protected void btnExcelImport_Click(object sender, EventArgs e)
{
if (this.LogisticsUpload.HasFile)//判断是否存在上传文件
{
string filename = this.LogisticsUpload.PostedFile.FileName;
string extension = (new FileInfo(filename)).Extension;
string newfilename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + extension;

//判断是否存在上传路径,如果不存在,则创建
if (!Directory.Exists(Server.MapPath("../Upload/Logistics")))
{
Directory.CreateDirectory(Server.MapPath("../Upload/Logistics"));
}
string path = Server.MapPath("../Upload/Logistics/");
this.LogisticsUpload.PostedFile.SaveAs(path + newfilename);//这一步实现上传文件

//插入数据库表
LogisticsLog logmodel = new LogisticsLog();
logmodel.FileName = filename;
logmodel.SavePath = path;
logmodel.CreateTime = DateTime.Now;
logmodel.CreaterId = base.CurrentUser.UserID.ToString();

logmodel.AgentId = this.AgentDropDownList.SelectedItem.Value.ToInt();
logmodel.AgentName = this.AgentDropDownList.SelectedItem.Text.ToString();
logmodel.Status = Convert.ToInt32(Core.EnumDefine.LogisticsStatus.wait);

//通过sftp方式上传到服务器
string sftppath = "http://www.mamicode.com/" + filename;//sftp根目录加上存入文件名
string localpath = path + newfilename;//本地文件
Framework.Common.SFTPOperation sftp = new Framework.Common.SFTPOperation(Config.ConfigSettings.Instance.SAP_SFTP_SERVER, int.Parse(Config.ConfigSettings.Instance.SAP_SFTP_PORT), Config.ConfigSettings.Instance.SAP_SFTP_ACCOUNT, Config.ConfigSettings.Instance.SAP_SFTP_PASSWORD);
sftp.Connect();
sftp.Put(localpath, sftppath);
sftp.Disconnect();

LogisticsBusinessService log = new LogisticsBusinessService();
if (log.Add(logmodel))
{
//Response.Write("<script>window.open(‘StockBatchList.aspx‘,‘_self‘)</script>");
this.AlertMessage("上传成功!");

Response.Redirect("LogisticsList.aspx");
}
else
{
this.AlertMessage("上传失败!");
}
}
}

sftp操作类,用到的方法已经标黄,直接看,主要是put方法

public class SFTPOperation
{
#region 字段或属性
/// <summary>
/// sftp连接
/// </summary>
private SftpClient sftp;
/// <summary>
/// SFTP连接状态
/// </summary>
public bool Connected { get { return sftp.IsConnected; } }
/// <summary>
/// 主机地址
/// </summary>
private const string HOST = "192.168.0.80";//192.168.0.80 //140.231.210.125
/// <summary>
/// 端口
/// </summary>
private const int PORT = 22;
/// <summary>
/// 用户名
/// </summary>
private const string USERNAME = "siemens_sftp";//siemens_sftp //sie_icit
/// <summary>
/// 密码
/// </summary>
private const string PASSWORD = "password01!";//password01! //Icitsftp20140826+-

#endregion

#region 构造

/// <summary>
/// 构造
/// </summary>
public SFTPOperation()
{
var keyboardAuthMethod = new KeyboardInteractiveAuthenticationMethod(USERNAME);
keyboardAuthMethod.AuthenticationPrompt += delegate(Object senderObject, AuthenticationPromptEventArgs eventArgs)
{
foreach (var prompt in eventArgs.Prompts)
{
if (prompt.Request.Equals("Password: ",
StringComparison.InvariantCultureIgnoreCase))
{
prompt.Response = PASSWORD;
}
}
};
var passwordAuthMethod = new PasswordAuthenticationMethod(USERNAME, PASSWORD);
var connInfo = new ConnectionInfo(HOST, USERNAME, new AuthenticationMethod[] {
passwordAuthMethod,
keyboardAuthMethod
});
sftp = new SftpClient(connInfo);
//sftp = new SftpClient(HOST, PORT, USERNAME, PASSWORD);
}
/// <summary>
/// 构造
/// </summary>
/// <param>主机</param>
/// <param>端口</param>
/// <param>用户名</param>
/// <param>密码</param>
public SFTPOperation(string host, int port, string user, string pwd)
{
var keyboardAuthMethod = new KeyboardInteractiveAuthenticationMethod(user);
keyboardAuthMethod.AuthenticationPrompt += delegate(Object senderObject, AuthenticationPromptEventArgs eventArgs)
{
foreach (var prompt in eventArgs.Prompts)
{
if (prompt.Request.Equals("Password: ",
StringComparison.InvariantCultureIgnoreCase))
{
prompt.Response = pwd;
}
}
};
var passwordAuthMethod = new PasswordAuthenticationMethod(user, pwd);
var connInfo = new ConnectionInfo(host, user, new AuthenticationMethod[] {
passwordAuthMethod,
keyboardAuthMethod
});
sftp = new SftpClient(connInfo);
//sftp = new SftpClient(host, port, user, pwd);
}
#endregion

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67975.html