在本地VS测试的时候没有问题可以正常下载,
但是在客户机上测试的时候无法下载
下载文件的方法如下public String Download(string filePath, string fileName)
        {
            FtpWebRequest reqFTP;
            try
            {
                FileStream outputStream = new FileStream(filePath + fileName, FileMode.Create);
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];                readCount = ftpStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }                ftpStream.Close();
                outputStream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
            }
            return "successful"; 
//我在这里测试返回值(在客户机上),测到所有的参数(ftpURI + fileName,filePath + fileName)都没有错,并且方法也有执行,就是没有下载到文件。
        }
另注,方法在本人VS上调试的时候一点问题都没有的。只是在客户机上面行不能。IE的权限已经全开,加可信任站点。我接收方法的返回值得知方法也有执行到。方法是通过ajax来调用的,实在是不知道问题出在哪,跪求高手指点。。感激不尽

解决方案 »

  1.   

    不过有一种可能,因为你这里传输的是流,流不是一次传输的,受网速限制,有可能当你ftpStream.Read(buffer, 0, bufferSize)的时候,你的缓冲区是字节数并为达到bufferSize的数量,甚至可能是0!当缓冲区为0字节的时候,你readCount = ftpStream.Read(buffer, 0, bufferSize);readcount=0了,你的while就跳出了,所以你可以把你的循环条件换成判断接受的总长度有没有到response.ContentLength!
      

  2.   

    因为在本地时网速噶快,所以缓冲区总是满的,你总能读到!
    你可以验证下,把你的bufferSize设大点1024*64或者1024*128,你就可以看到,你的readcount每次都远远小于bufferSize
      

  3.   

    我这里得到的response.ContentLength 是 -1不知道怎么回事。
      

  4.   

    我的客户机是在局域网内的,所以zhouyanfss提到的这个问题应该不是主要的。因为就像是while马上跳出,程序也应该会创建一个0kb的文件在本地磁盘上,但是没有,说明有问题
      

  5.   

    也不是没连上,因为在本地测试的时候response.ContentLength也是等于-1
    但是这样就可以下载文件。。
    int readCount;
                    byte[] buffer = new byte[bufferSize];                readCount = ftpStream.Read(buffer, 0, bufferSize);
                    while (readCount > 0)
                    {
                        outputStream.Write(buffer, 0, readCount);
                        readCount = ftpStream.Read(buffer, 0, bufferSize);
                    }
      

  6.   

    问题还是没有解决,很感谢zhouyanfss的热心,
    继续期待。