我正试图将文件上载到linux服务器,但我收到一个错误,错误是:“无法连接到远程服务器
”。我不知道我的代码是否错误,或者连接是否被服务器阻止了——使用相同的细节,我可以将服务器与FileZilla连接起来。
我的代码:
const string UserName = "userName";
const string Password = "password";
const string ServerIp = "11.22.333.444/";
public bool UploadFile(HttpPostedFileBase file)
{
string fileName = file.FileName;
var serverUri = new Uri("ftp://" + ServerIp + fileName);
// the serverUri should start with the ftp:// scheme.
if (serverUri.Scheme != Uri.UriSchemeFtp)
return false;
try
{
// get the object used to communicate with the server.
var request = (FtpWebRequest)WebRequest.Create(serverUri);
request.EnableSsl = true;
request.UsePassive = true;
request.UseBinary = true;
request.Credentials = new NetworkCredential(UserName, Password);
request.Method = WebRequestMethods.Ftp.UploadFile;
// read file into byte array
var sourceStream = new StreamReader(file.InputStream);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
// send bytes to server
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
var response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Response status: {0}", response.StatusDescription);
}
catch (Exception exc)
{
throw exc;
}
return true;
}
您在这里尝试的是建立一个FTPS连接,而不是SFTP连接。EnableSsl
选项仅激活TLS上的FTP(因此FTPS)。它使用端口21连接到服务器。
如果您确实在FileZilla中激活了SFTP,则必须使用端口22上的SSH连接才能连接到服务器(SFTP=SSH文件传输协议)。最简单的方法应该是使用SharpSSH。
你也可以看看这个问题。
我找到的最好的library/NuGet包是SSH。网由伦西。打开Nuget Package Manager并将其安装到项目中。
上传可以通过存储文件或byte[]文件完成。
// you could pass the host, port, usr, and pass as parameters
public void FileUploadSFTP()
{
var host = "whateverthehostis.com";
var port = 22;
var username = "username";
var password = "passw0rd";
// http://stackoverflow.com/questions/18757097/writing-data-into-csv-file/39535867#39535867
byte[] csvFile = DownloadCSV(); // Function returns byte[] csv file
using (var client = new SftpClient(host, port, username, password))
{
client.Connect();
if (client.IsConnected)
{
Debug.WriteLine("I'm connected to the client");
using (var ms = new MemoryStream(csvFile))
{
client.BufferSize = (uint)ms.Length; // bypass Payload error large files
client.UploadFile(ms, GetListFileName());
}
}
else
{
Debug.WriteLine("I couldn't connect");
}
}
}
这是我用来作为资源让我开始的网站:http://blog.deltacode.be/2012/01/05/uploading-a-file-using-sftp-in-c-sharp/
它是为上传文件而写的。
// you could pass the host, port, usr, pass, and uploadFile as parameters
public void FileUploadSFTP()
{
var host = "whateverthehostis.com";
var port = 22;
var username = "username";
var password = "passw0rd";
// path for file you want to upload
var uploadFile = @"c:yourfilegoeshere.txt";
using (var client = new SftpClient(host, port, username, password))
{
client.Connect();
if (client.IsConnected)
{
Debug.WriteLine("I'm connected to the client");
using (var fileStream = new FileStream(uploadFile, FileMode.Open))
{
client.BufferSize = 4 * 1024; // bypass Payload error large files
client.UploadFile(fileStream, Path.GetFileName(uploadFile));
}
}
else
{
Debug.WriteLine("I couldn't connect");
}
}
}
希望这对任何试图在C#中使用SFTP上传文件的人都有帮助。
问题内容: 我已经通过ftp成功上传了文件,但是现在我需要通过SFTP进行上传。我可以成功连接到远程服务器,创建文件并写入文件,但是无法将现有文件从本地服务器上载到远程服务器。ftp_put是否不通过sftp连接触发? 我的代码用来写文件: 有没有人成功抓取本地文件并通过上述方法使用sftp上传?一个例子将不胜感激。 谢谢 问题答案: 通过上述方法(涉及sftp),您可以使用stream_copy
我的本地计算机上有一个文件。我有一个Perl脚本可以通过SFTP连接将此文件复制到远程位置()。
有没有一种方法可以使用Jsch进行异步sftp文件传输,而无需管理自己的线程? 我看到有一个sftprogressmonitor来监控进度,但它只提供了一个回调。 我正在寻找类似Java的write方法: 公共抽象未来写入(ByteBuffer src,长位置) 哪个库提供异步sftp传输?
本文向大家介绍C#实现文件上传以及多文件上传功能,包括了C#实现文件上传以及多文件上传功能的使用技巧和注意事项,需要的朋友参考一下 一、前端搭建 1、前端用到js:uploadify(下载地址:http://www.uploadify.com/download/)、layer (下载地址:http://layer.layui.com/),下载之后把它们放在你的项目里 列如 2、根据你的需要在你项目
本文向大家介绍C++文件上传、下载工具,包括了C++文件上传、下载工具的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++文件上传下载的实现代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。
本文向大家介绍c# 用Base64实现文件上传,包括了c# 用Base64实现文件上传的使用技巧和注意事项,需要的朋友参考一下 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法。 使用base64进行文件上传的具体流程是:前台使用js将文件转换为base64格式,后台通过高级编程语言,将base64格式的文件,转换