C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的。

出现应用程序未处理的异常:2015/1/6 11:40:56
异常类型:WebException

异常消息:远程服务器返回错误: (500) 语法错误,无法识别命令。

参考:http://www.cnblogs.com/webabcd/archive/2007/01/21/626242.html

KeepAlive - 指定连接是应该关闭还是在请求完成之后关闭,默认为true

 /// <summary>
        /// FTP下载文件(带进度条)
        /// </summary>
        /// <param name="filename"></param>
        public void DownloadFile(string filename)
        {
            float percent = 0;
            string filePathName = string.Empty;
            string url = string.Empty;
            filePathName = Path.Combine(Application.StartupPath, filename);
            string dirPath = GetDirPath(filePathName);
            if (!Directory.Exists(dirPath))
                Directory.CreateDirectory(dirPath);
            //=>替换文件目录中的路径为网络路径
            filename = filename.Replace("\\", "/");
            url = "ftp://" + clientUpdateInfo.UpdateFTPIP + "/" + clientUpdateInfo.UpdatePath + "/" + filename;
            var reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
            reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFtp.UseBinary = true;
            reqFtp.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
            reqFtp.Credentials = new NetworkCredential(clientUpdateInfo.FtpUserName, clientUpdateInfo.FtpUserPwd);
            var response = (FtpWebResponse)reqFtp.GetResponse();
            long totalBytes = response.ContentLength;
            if (prog != null)
            {
                this.BeginInvoke(new MethodInvoker(delegate()
                {
                    prog.Maximum = (int)totalBytes;
                }));
            }
            Stream st = response.GetResponseStream();
            var so = new FileStream(filePathName, FileMode.Create);
            long totalDownloadedByte = 0;
            byte[] by = new byte[1024];
            int osize = st.Read(by, 0, (int)by.Length);
            while (osize > 0)
            {
                totalDownloadedByte = osize + totalDownloadedByte;
                so.Write(by, 0, osize);
                if (prog != null)
                {
                    this.BeginInvoke(new MethodInvoker(delegate()
                    {
                        prog.Value = (int)totalDownloadedByte;
                    }));

                }
                osize = st.Read(by, 0, (int)by.Length);
                percent = (float)totalDownloadedByte * 1.0f / (float)totalBytes * 100;
                Application.DoEvents();
                this.BeginInvoke(new MethodInvoker(delegate()
                {
                    lbDownInfo.Text = "正在下载" + filename + ",下载进度为:" + Math.Round(percent, 2) + "%";
                    lbDownInfo.Refresh();
                }));
                Application.DoEvents();
            }
            so.Close();
            st.Close();
            response.Close();
        }

        private void FtpDownload(string filename)
        {
            string filePathName = string.Empty;
            string url = string.Empty;
            filePathName = Path.Combine(Application.StartupPath, filename);
            string dirPath = GetDirPath(filePathName);
            if (!Directory.Exists(dirPath))
                Directory.CreateDirectory(dirPath);
            //=>替换文件目录中的路径为网络路径
            filename = filename.Replace("\\", "/");
            url = "ftp://" + clientUpdateInfo.UpdateFTPIP + "/" + clientUpdateInfo.UpdatePath + "/" + filename;
            FtpWebRequest reqFTP;
            this.BeginInvoke(new MethodInvoker(delegate()
            {
                this.lbDownInfo.Text = "开始下载中...";
            }));
            FileStream outputStream = new FileStream(filePathName, FileMode.Create);
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
            reqFTP.Credentials = new NetworkCredential(clientUpdateInfo.FtpUserName, clientUpdateInfo.FtpUserPwd);
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            reqFTP.KeepAlive = false;

            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
            Stream ftpStream = response.GetResponseStream();
            int bufferSize = 1024;
            int readCount;
            byte[] buffer = new byte[bufferSize];
            readCount = ftpStream.Read(buffer, 0, bufferSize);
            //FTP上文件的大小
            int allbye = GetFtpFileSize(filename);// (int)response.ContentLength;
            int startbye = 0;
            this.BeginInvoke(new MethodInvoker(delegate()
              {
                  this.prog.Maximum = allbye;
                  this.prog.Minimum = 0;
                  this.prog.Visible = true;
                  this.lbDownInfo.Visible = true;
              }));
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                startbye += readCount;
                this.BeginInvoke(new MethodInvoker(delegate()
                  {
                      this.lbDownInfo.Text = "已下载:" + (int)(startbye / 1024) + "KB/" + "总长度:"
                                            + (int)(allbye / 1024) + "KB" + " " + " 文件名:" + filename;
                      prog.Value = startbye;
                      this.lbDownInfo.Refresh();
                  }));
                Application.DoEvents();
                Thread.Sleep(5);
            }
            this.BeginInvoke(new MethodInvoker(delegate()
            {
                this.prog.Visible = false;
                this.lbDownInfo.Text = "下载成功!";
            }));
            ftpStream.Close();
            outputStream.Close();
            response.Close();
        }
时间: 2024-11-07 04:58:37

C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令的相关文章

32. mac上传下载文件到远程服务器scp

1.scp上传 scp 源文件  用户名@ip地址:目标目录 比如: scp ./a.log [email protected]:/root/upload/ 2.scp下载 方法一样,把前后的文件名调换一下位置] scp  [email protected]:/root/upload/a.log ./

C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)

今天用代码删除FTP服务器上的目录时候,报错:远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件). 习惯性的google,不外乎以下几点: 1.URL路径不对,看看有没有多加空格,或者大小写问题 2.权限是否足 3.需要反复连接的时候,如GetFileList,需要递归获得所有文件,keepAlive则设成false,一个查询请求完了后就关闭. 照做后问题依旧,很苦恼! 然后在FTP上建立了一个空目录,删除之,竟然能删除了.... 所以,找到原因:删除目录,该目录下不能

安装SFTP/FTP插件快速编辑远程服务器文件

默认的Sublime Text 3 是没有sftp/ftp功能的,如果编辑器自带ftp势必会提高开发效率,虽然Sublime Text 3 默认是没有ftp功能,但是安装sftp插件很容易.下面是我安装步骤,希望能帮助那些喜欢Sublime Text 3的朋友. 按下Ctrl+Shift+P调出命令面板 输入install 调出 Install Package 选项并回车,然后输入ftp,下拉列表中会出现一些相关的插件,选中sftp进行安装就行了, 出现下图说明安装成功了. 装好后还需配置如下:

写自动更新程序出现&quot;远程服务器返回错误: (404) 未找到&quot;

在win2003配置后,在客户端运行时能够下载exe和dll文件,但是在更新lib文件时总是报“远程服务器返回错误: (404) 未找到”错误,不明白咋会出现这个问题,去网上一查,发现以下解决办法: 发现如下方法可以解决该问题: 给网站添加MIME的类型,如下: .*application/octet-stream 按照说法做,在服务器上打开iis,找到自动升级的文件夹,查看属性,选择”HTTP头“选项卡,发现有个MIME映射选项,单击”文件类型“,再单击”新类型”,在关联扩展名里添加“.*”,

服务器常见问题,如何解决“远程服务器返回错误”?

在服务器租用中,服务器比较容易出几个问题的其中一个就是"远程服务器返回错误".下面我们看一下如何解决:一."远程服务器返回错误: (501) 未实现"的错误解决方法:Web服务扩展中的WebDAV惹得祸,将IIS的"Web服务扩展"中的"WebDAV"设置成"允许"!PS:iis6的 webdav支持 其实就是个基于http的ftp功能 ,明确iis不能直接上传文件,需要扩展支持的话应该不会饶弯路吧?二.&

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy 分析过程: 在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因. 调

FTP下载文件工具类

FTP文件下载需要的jar包commons-net-2.0.jar有时还需要:jakarta-oro.jar 1 package com.wdxc.util; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.util.HashMap; 8 import java.util.Ma

C# 上传文件至远程服务器

C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28|  分类: C#|举报|字号 订阅 最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传到远程服务器上面. 注意,我在这里使用的是WebClient而不是ftp 首先,我们先来定义一个类UpLoadFile,这个类就是文件上传类.代码如下: public void UpLoadFile(string fileNamePath, string uriString, bool IsAutoRena

visual studio 远程服务器返回了意外响应:(417)expectation failed

解决方法: 修改devenv.exe.config文件,添加 <servicePointManager expect100Continue="false" /> C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe.config <system.net>        <settings>            <ipv6 enabled="