用ftp上传文件,下面是MSDN上的代码;public static void Main ()
        {
            // Get the object used to communicate with the server.
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
            request.Method = WebRequestMethods.Ftp.UploadFile;            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential ("anonymous","[email protected]");
            
            // Copy the contents of the file to the request stream.
            StreamReader sourceStream = new StreamReader("testfile.txt");
            byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
            sourceStream.Close();
            request.ContentLength = fileContents.Length;            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    
            Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
    
            response.Close();
            }
可是在FtpWebResponse response = (FtpWebResponse)request.GetResponse();
时会出现“基础连接已经关闭: 接收时发生错误”;winform程序,这是什么原因?

解决方案 »

  1.   

    你的ftp网址好像打不开:ftp://www.contoso.com/test.htm
      

  2.   

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
    这句话有问题吧,一般是这样的
    string url="ftp://192.168.1.1/a.txt";
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
      

  3.   

    /// <summary>
            /// 利用FTP上传
            /// by minjiang 07-09-05
            /// </summary>
            /// <param name="filename">上传的文件名</param>
            private void mFtpUpload(string filename )
            {
                string strfileoldname;//图片保存后名称
                //为文件命名,然后保存
                string fileExtension;
                fileExtension = System.IO.Path.GetExtension(filename);
                Random ra = new Random();            strfileoldname = ra.Next(100000, 999999).ToString() + fileExtension;
                FileInfo fileInf = new FileInfo(filename);
                //string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
                string uri = "ftp://" + ftpServerIP + "/" + strfileoldname ;
                FtpWebRequest reqFTP;            // 根据uri创建FtpWebRequest对象 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                //重命名文件的新名称 by minjiang 07-09-05
                reqFTP.RenameTo = strfileoldname;
                // ftp用户名和密码
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);            // 默认为true,连接不会被关闭
                // 在一个命令之后被执行
                reqFTP.KeepAlive = false;            // 指定执行什么命令
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;            // 指定数据传输类型
                reqFTP.UseBinary = true;            // 上传文件时通知服务器文件的大小
                reqFTP.ContentLength = fileInf.Length;            // 缓冲大小设置为2kb
                int buffLength = 2048;            byte[] buff = new byte[buffLength];
                int contentLen;
                //设置上传进度变量
                double  dProgess = 1.00;
                // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
                FileStream fs = fileInf.OpenRead();
                FtpWebResponse resFTP = null ;
                try
                {
                    // 把上传的文件写入流
                    Stream strm = reqFTP.GetRequestStream();
                   
                    // 每次读文件流的2kb
                    contentLen = fs.Read(buff, 0, buffLength);
                   
                    // 流内容没有结束
                    while (contentLen != 0)
                    {
                        // 把内容从file stream 写入 upload stream
                        strm.Write(buff, 0, contentLen);                    contentLen = fs.Read(buff, 0, buffLength);
                        
                    }                
                    // 关闭两个流
                    strm.Close();
                    fs.Close();
                    Response.Write("上传成功,文件路径:"+uri );
                }
                catch (Exception ex)
                {
                    string err = ex .Message .ToString ();
                    if (resFTP != null)
                    {
                        string sResFTP = resFTP.StatusCode.ToString();
                    
                    }
                   
                    Response.Write(err);
                }
            }
            //执行上传功能
            protected void txtUpload_Click(object sender, EventArgs e)
            {
                HttpFileCollection files = HttpContext.Current.Request.Files;
                //要上传的文件名
                string fileName = this.File1.PostedFile.FileName;
               
                this.mFtpUpload(fileName );        }
      

  4.   

    我这几天正好在做用FTP上传,上面的代码是可以的.你试试,对你应该多少有帮助.希望共同讨论