2010-05-26 51 views
0

目前我正在进行此ftp传输。 http://msdn.microsoft.com/en-us/library/ms229715.aspx

使用ftpwebrequest传输ftp文件

我安装我的服务器计算机IIS以对端口21 FTP站点和传送文件的伟大工程。但是我想将ftp添加到服务器上的托管站点,这就是我在连接时遇到的问题。当我尝试通过命令promt进行连接时,出现未知的主机错误。我已经改变了端口并在防火墙中打开它。即使我可以连接,我怎样才能决定我想上传到哪个文件夹?

回答

0
  1. 你仍然有连接问题与服务器。尝试ping命令,看看你是否得到未知的主机错误。

  2. 对于上传路径问题,您需要提供您需要将文件上传到的完整文件夹路径。这里有一个例子代码:

    如果(!!!网站= NULL & & FOLDERPATH = NULL & &的FileName = NULL){
    FTPrequest =(的FtpWebRequest)FtpWebRequest.Create(新的URI(CompletePath));
    }

+0

像这样的完整路径,fpt://mydomain.com/Upload/Images/file.txt? – 2010-05-26 11:00:49

+0

我该如何ping ftp? – 2010-05-26 11:06:30

+0

是的..文件的完整路径ftp://mydomain.com/Upload/Images/file.txt ..上面的代码是我正在使用..关于ping ..检查您是否可以使用正常访问ftp服务器ping命令 – 2010-05-26 11:20:45

0

而如果服务器中存在的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(); 
    } 
} 
+0

感谢您的这一点。我的连接工作,但它只有当我尝试通过我的代码连接它不会工作。我的事情是我用ftp发布在iis上获得了4个站点,ftp使用相同的ip和相同的端口,这就是为什么我使用虚拟名称。但也许我错了,虚拟名称实际上需要注册域名。 – 2010-05-27 07:55:44

0

后来我有一个问题,我有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");