首页 新闻 会员 周边

FTP上传问题

0
悬赏园豆:50 [已解决问题] 解决于 2012-06-21 15:35

如下代码我原来测试过。是好使的。但是现在总是报错:

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

在网上找了一堆问题好多都是重复的。没什么用处。

我把源代码贴上来大家帮忙看看。

public void DownloadFile(string ftpUrl, string ftpUserID, string ftpPassword, string fileDirectory, string ftpFilePath)
        {
            string filePath = ftpFilePath.Substring(ftpUrl.Length).Replace("/", "\\");
            int fileLenght = filePath.Substring(filePath.LastIndexOf("\\") + 1).Length;
            string localFilePath = fileDirectory + "\\" + filePath.Substring(0, filePath.Length - fileLenght);
            string fileName = ftpFilePath.Substring(ftpFilePath.LastIndexOf('/') + 1);
            if (fileDirectory == string.Empty)//默认文件夹
            {
                fileDirectory = "C:\ftpDownLoad";
                if (!Directory.Exists(@fileDirectory))
                {
                    Directory.CreateDirectory(@fileDirectory);
                }
            }
            if (!Directory.Exists(localFilePath))//创建文件夹
            {
                Directory.CreateDirectory(localFilePath);
            }
            using (FileStream fs = new FileStream(localFilePath+fileName, FileMode.OpenOrCreate))
            {
                FtpWebRequest fwRequest = (FtpWebRequest)WebRequest.Create(ftpFilePath);
                fwRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                fwRequest.KeepAlive = false;
                fwRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                fwRequest.ContentOffset = fs.Length;
                using (FtpWebResponse response = (FtpWebResponse)fwRequest.GetResponse())
                {

                    fs.Position = fs.Length;
                    byte[] buffer = new byte[4096];
                    int count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
                    while (count > 0)
                    {
                        fs.Write(buffer, 0, count);
                        count = response.GetResponseStream().Read(buffer, 0, buffer.Length);                       
                    }
                    response.GetResponseStream().Close();
                }
            }
        }

Bj-Soctt-胖仔的主页 Bj-Soctt-胖仔 | 初学一级 | 园豆:70
提问于:2012-06-16 18:32
< >
分享
最佳答案
-1

1、你确认你的FTP服务器与帐户密码没问题?

2、response.GetResponseStream()调用一次就好,没必要多次这样调用。

我估计错误就在response.GetResponseStream(),当服务器忙的时候,这段代码的问题很大。

3、response.GetResponseStream().Close()简直就是画蛇添足!代码可以修改为:

                using (FtpWebResponse response = (FtpWebResponse)fwRequest.GetResponse())
                {
Stream stream = response.GetResponseStream();
                    fs.Position = fs.Length;
                    byte[] buffer = new byte[4096];
                    int count = 0;
                    while((count = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fs.Write(buffer, 0, count);
                    }
                    stream.Close();//其实没必要关闭,网络流在response被dispose的时候会处理。
                }
收获园豆:40
无之无 | 大侠五级 |园豆:5095 | 2012-06-16 19:40

你的代码我参考下。还是报相同的错误!我怀疑是不是ftp文件路径有问题。我本地上传在根目录下的文件,可以下载。。。但是如果多级目录在创建完后打不开文件夹,而且也删除不了(报是否有权限删除)。我确定在浏览器中访问ftp的时候该路径是没问题能够正常访问的。同样的路径我copy到程序上就有问题了。

Bj-Soctt-胖仔 | 园豆:70 (初学一级) | 2012-06-16 22:45

@Bj-Soctt-胖仔: 这个倒是没注意过。你或者,使用FTP协议来实现这个下载看?

无之无 | 园豆:5095 (大侠五级) | 2012-06-17 06:05
其他回答(1)
0

建议检查一下FTP服务器上文件系统的权限设置

收获园豆:10
dudu | 园豆:30994 (高人七级) | 2012-06-17 12:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册