FTP 通过Proxy Upload 文件(Donot Support FTP server when behind an HTTP proxy)

//利用ftpwebrequest获取输入流,然后往这个流里写要上传的文件。 需要引用system.net空间
        string filePath = "f:\\Svr_2008w_SP2_x86.ISO"; //要上传的文件路径。该文件2g
        string fileName = "Svr_2008w_SP2_x86.ISO";//要上传的文件名称
        string ftpPath = "ftp://169.254.10.231//";//ftp服务器地址
        string username = "test123";//用户名
        string password = "123456";//密码

        FtpWebRequest myRequest = (FtpWebRequest)WebRequest.Create(ftpPath + fileName);//创建ftp请求对象
        myRequest.Credentials = new NetworkCredential(username,password);//设置ftp通讯凭证
        myRequest.Proxy = null;//当你的机子使用的是代理上网时,最好加上这一行,要不然报“使用 HTTP 代理时不支持请求的 FTP 命令。”错误
        myRequest.Method = WebRequestMethods.Ftp.UploadFile;//上传
        //其他参数
        //myRequest.KeepAlive = true;
        //myRequest.UseBinary = true;
        //myRequest.UsePassive = true;

        Stream rStream = null;//ftp请求流
        try
        {
            rStream = myRequest.GetRequestStream();//创建ftp请求流
            FileStream fs = File.OpenRead(filePath);//io流

            int iCount = 2048;
            int iFlag = 0;//读入的字节数
            byte[] myBuffer = new byte[iCount];

            //这里用一个固定的长度2048,也可以改大一点,这里不要用要上传的文件的长度,因为如果文件过大,length的长度超出了int的范围。
            //而fs.Read和 rStream.Write 里面的参数是int类型的,过大就会出错
            do
            {
                iFlag = fs.Read(myBuffer, 0, iCount);
                rStream.Write(myBuffer, 0, iFlag);
            } while (iFlag != 0);

            fs.Close();
            rStream.Close();

            FtpWebResponse myResponse= (FtpWebResponse)myRequest.GetResponse();
            myResponse.Close();

            //参考http://msdn.microsoft.com/zh-cn/library/8exfzxft%28v=vs.90%29.aspx
            //待续
            //需要断点续传
            //需要验证md5值
            //需要关闭连接
        }
        catch (Exception ex)
        {
           
            throw;
        }

你可能感兴趣的:(FTP 通过Proxy Upload 文件(Donot Support FTP server when behind an HTTP proxy))