目前我正在进行此ftp传输。 http://msdn.microsoft.com/en-us/library/ms229715.aspx
使用ftpwebrequest传输ftp文件
我安装我的服务器计算机IIS以对端口21 FTP站点和传送文件的伟大工程。但是我想将ftp添加到服务器上的托管站点,这就是我在连接时遇到的问题。当我尝试通过命令promt进行连接时,出现未知的主机错误。我已经改变了端口并在防火墙中打开它。即使我可以连接,我怎样才能决定我想上传到哪个文件夹?
目前我正在进行此ftp传输。 http://msdn.microsoft.com/en-us/library/ms229715.aspx
使用ftpwebrequest传输ftp文件
我安装我的服务器计算机IIS以对端口21 FTP站点和传送文件的伟大工程。但是我想将ftp添加到服务器上的托管站点,这就是我在连接时遇到的问题。当我尝试通过命令promt进行连接时,出现未知的主机错误。我已经改变了端口并在防火墙中打开它。即使我可以连接,我怎样才能决定我想上传到哪个文件夹?
你仍然有连接问题与服务器。尝试ping命令,看看你是否得到未知的主机错误。
对于上传路径问题,您需要提供您需要将文件上传到的完整文件夹路径。这里有一个例子代码:
如果(!!!网站= NULL & & FOLDERPATH = NULL & &的FileName = NULL){
FTPrequest =(的FtpWebRequest)FtpWebRequest.Create(新的URI(CompletePath));
}
而如果服务器中存在的ping会告诉你,你应该尝试远程登录直接给你测试的端口。
>> telnet url portnumber
>> telnet ftp.mydomain.com 21
如果远程登录成功后,你可以肯定的是,FTP端口处于激活状态,并可以访问,那么你可以继续解决您的问题。
最佳做法是
不要试图一个自动化的过程, 你不能手动完成。
因此,telnet,然后从命令行测试ftp或使用诸如fireftp/cute ftp之类的实用程序,无论您选择什么。
如果你能够得到这样一个测试的工作,那么你将能够确定你的麻烦的确切原因。
一旦您成功测试了对您ftp站点的访问权限, 将完整的URI传递给FtpWebRequest。
这是我为测试而创建的一个函数。
public static void DoQueryAndUploadFile(string uri, string username, string password, string filename)
{
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(uri + "/" + filename);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
ftp.Credentials = new System.Net.NetworkCredential(username, password);
using(StreamWriter sw = new StreamWriter(ftp.GetRequestStream()))
{
// Do the query here then write to the ftp stream by iterating DataReader or other resultset, following code is just to demo concept:
for (int i = 0; i < 100; i++)
{
sw.WriteLine("{0},row-{1},data-{2}", i, i, i);
}
sw.Flush();
}
}
感谢您的这一点。我的连接工作,但它只有当我尝试通过我的代码连接它不会工作。我的事情是我用ftp发布在iis上获得了4个站点,ftp使用相同的ip和相同的端口,这就是为什么我使用虚拟名称。但也许我错了,虚拟名称实际上需要注册域名。 – 2010-05-27 07:55:44
后来我有一个问题,我有2个FTP对我的IIS使用相同的IP,所以我用虚拟的名字为他们。我不知道如何连接到我的代码,但这只是你去噢的那些愚蠢的时刻之一。
解决方案非常简单,所以我想我会分享是否有任何问题与我一样。关键是使用虚拟名称作为用户名并用|分开然后真正写出你的真实用户名。
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://IP:PORT/PATH/THE FILE"));
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Proxy = null;
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = false;
ftpRequest.Credentials = new NetworkCredential("VIRTUAL NAME|MY USER", "MY PASSWORD");
像这样的完整路径,fpt://mydomain.com/Upload/Images/file.txt? – 2010-05-26 11:00:49
我该如何ping ftp? – 2010-05-26 11:06:30
是的..文件的完整路径ftp://mydomain.com/Upload/Images/file.txt ..上面的代码是我正在使用..关于ping ..检查您是否可以使用正常访问ftp服务器ping命令 – 2010-05-26 11:20:45