提问者:小点点

如何通过. net控制台应用程序从ftp服务器下载名称中带有希伯来文字符的文件?


我用的是一个。net控制台应用程序是用C#编写的,通常从ftp服务器下载某些文件时,它会正常工作,直到出现一个带有希伯来语字符的文件,命名如下:

1234-. jpeg

所以我尝试使用chrome和FileZilla下载同一个文件——没有遇到任何问题,文件名的普通版本和网址编码版本都没有。

我的问题是如何下载相同的文件与我的C#应用程序

我曾经尝试过:

  • 要将名称转义为URL编码,请为chrome工作,但不是我的应用程序

这是我的密码:

 public static string attachmentToFile(string name, string filename)
    {
        try
        {
      
            string ftpConnection = ConfigurationManager.AppSettings["FtpServer"].ToString();
            string ftpUser = ConfigurationManager.AppSettings["FtpUser"].ToString();
            string ftpPassword = ConfigurationManager.AppSettings["FtpPassword"].ToString();
            string attachmentPath = ConfigurationManager.AppSettings["attachmentFolder"].ToString();

            Directory.CreateDirectory(attachmentPath);

            attachmentPath += '\\' + name + Path.GetExtension(filename);


            FtpWebRequest attachmentRequest = (FtpWebRequest)WebRequest.Create(
                new Uri(ftpConnection + "/files_directory/" + filename)
                );


            attachmentRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
            attachmentRequest.Method = WebRequestMethods.Ftp.DownloadFile;

            FtpWebResponse response = (FtpWebResponse)attachmentRequest.GetResponse();
            var stream = response.GetResponseStream();
            FileStream saveStream = new FileStream(attachmentPath, FileMode.OpenOrCreate);
            //stream.Seek(0, SeekOrigin.Begin);
            stream.CopyTo(saveStream);
            saveStream.Close();
            return attachmentPath;
        }
        catch (Exception ex)
        {
            Logger.LogError(MethodBase.GetCurrentMethod(), ex, "failed downloading file from server: " + filename);
            return null;
        }
    }

错误是

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

而在Filezilla,它是成功的

网络日志

系统网络信息:0:[14564]FtpWebRequest#54024015::。执行器(ftp://files@域名。有限公司。il@11.111.111.11:1111/files\u directory/22222-IMG-22222-22222。jpg)
系统。网络信息:0:[14564]FtpWebRequest#54024015::GetResponse(方法=RETR.)
系统。Net信息:0:[14564]当前操作系统安装类型为“客户端”
系统。Net信息:0:[14564]支持的RAS:True
系统。网络信息:0:[14564]FtpControlStream#13869071-已从10.0创建连接。0.13:11111至11.111。111.11:1111.
系统。Net信息:0:[14564]将FtpWebRequest#54024015与FtpControlStream#13869071
系统关联。网络信息:0:[14564]FtpControlStream#13869071-收到响应[220------欢迎使用纯FTPd[privsep][TLS]------
220您是允许的50个用户中的第3个<当地时间现在是09:44。服务器端口:1111
220这是一个私人系统-没有匿名登录
220您将在15分钟不活动后断开连接。]


下载150 119.1 KB]
系统。网络信息:0:[14564]FtpControlStream#13869071-收到响应[226文件成功传输
226 0.052秒(此处测量),每秒2.24 MB]



要下载的150 4312.7 KB]
系统。网络信息:0:[14564]FtpControlStream#13869071-收到响应[226文件成功传输
226 1.874秒(此处测量),每秒2.25 MB]


下载150.2 KB]
系统。网络信息:0:[14564]FtpControlStream#13869071-接收到响应[226文件成功传输
226 0.884秒(此处测量),每秒2.18 MB]
系统。网络信息:0:[14564]FtpWebRequest#49652976::(正在释放FTP连接#13869071。)
系统。网络信息:0:[14564]FtpWebRequest#44223604::。执行器(ftp://files@域名。有限公司。il@11.111.111.11:1111/files\u directory/11111111-1111111。jpg)
系统。网络信息:0:[14564]FtpWebRequest#44223604::GetResponse(方法=RETR.)
系统。网络信息:0:[14564]将FtpWebRequest#44223604与FtpControlStream#13869071
系统关联。网络信息:0:[14564]FtpControlStream#13869071-发送命令[PASV]
系统。网络信息:0:[14564]FtpControlStream#13869071-收到响应[227进入被动模式(11111111111)]
系统。Net信息:0:[14564]FtpControlStream#13869071-发送命令[RETR files_directory/11111111-1111111.jpg]
系统。网络信息:0:[14564]FtpControlStream#13869071-收到响应[150接受的数据连接
150 1953.3 KB下载]
系统。网络信息:0:[14564]FtpControlStream#13869071-收到响应[226文件成功传输
226 0.929秒(此处测量),每秒2.05 MB]
系统。网络信息:0:[14564]FtpWebRequest#44223604::(正在释放FTP连接#13869071。)
系统。网络信息:0:[14564]FtpWebRequest#62468121::。执行器(ftp://files@域名。有限公司。il@11.111.111.11:1111/files_directory/1234--。jpeg)
系统。网络信息:0:[14564]FtpWebRequest#62468121::GetResponse(方法=RETR.)
系统。网络信息:0:[14564]将FtpWebRequest#62468121与FtpControlStream#13869071
系统关联。网络信息:0:[14564]FtpControlStream#13869071-发送命令[PASV]
系统。网络信息:0:[14564]FtpControlStream#13869071-收到响应[227进入被动模式(11111111111)]
系统。Net信息:0:[14564]FtpControlStream#13869071-发送命令[RETR files_directory/1234--אבג.jpeg]
系统。Net信息:0:[14564]FtpControlStream#13869071-收到响应[550无法打开文件(u目录/1234--u目录בu.jpeg:没有这样的文件或目录]
系统。网络信息:0:[14564]FtpWebRequest#62468121::(正在释放FTP连接#13869071。)
系统。净错误:0:[14564]FtpWebRequest#62468121::GetResponse中出现异常-远程服务器返回错误:(550)文件不可用(例如,找不到文件,无法访问)
在系统中。网FtpWebRequest。系统上的SyncRequestCallback(对象obj)
。网FtpWebRequest。系统上的RequestCallback(对象obj)
。网命令流。处置(布尔处置)
在系统中。木卫一。流动在系统上关闭()。木卫一。流动系统上的Dispose()
。网连接池。在系统上销毁(PooledStream PooledStream)
。网连接池。PutConnection(PooledStream PooledStream、对象拥有对象、Int32 creationTimeout、布尔值可重用)
在系统中。网FtpWebRequest。FinishRequestStage(请求阶段)
在系统中。网FtpWebRequest。GetResponse()


共1个答案

匿名用户

虽然我没有找到错误的确切原因,在打印FileZilla详细日志和FtpWebRequest后,如评论中建议的,并阅读更多,我读到很难使用System更改某些配置。网。Webask和HttpClient,所以我使用了3d方库(FluentFTP)有很多可用的配置,但在我的情况下,我不需要做任何事情,问题通过默认配置解决了。