遗憾迟香 发表于 2021-12-29 21:51

C# ftp在linux报错

使用以下代码实现ftp上传(敏感信息打码)
/// <summary>
      /// 上传ftp服务
      /// </summary>
      /// <param name="path">文件地址</param>
      /// <returns></returns>
      public static string Upload(string path)
      {
            var client = new WebClient
            {
                Credentials = new NetworkCredential("***", "***"),//用户名和密码
                BaseAddress = "ftp://host.*****.com"
            };
            string ftpPath = client.BaseAddress + "/wwwroot/" + Path.GetFileName(path); //上传fptp路径
            string returnPath = "";
            try
            {
                client.UploadFile(ftpPath, path);
                returnPath = ftpPath;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            return returnPath;
      }

在windows上运行无任何问题
但在linux+mono,且文件名含有中文时报错
System.Net.WebException: Server returned an error: 550 The filename, directory name, or volume label syntax is incorrect.
at System.Net.FtpWebRequest.OpenDataConnection () in <filename unknown>:0
at System.Net.FtpWebRequest.UploadData () in <filename unknown>:0
at System.Net.FtpWebRequest.ProcessMethod () in <filename unknown>:0
at System.Net.FtpWebRequest.ProcessRequest () in <filename unknown>:0

GitHubList 发表于 2021-12-29 22:16

試試用 FtpWebRequest

https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=net-6.0

老伙计 发表于 2021-12-30 11:10

本帖最后由 老伙计 于 2021-12-30 11:12 编辑

          那是因为 Linux 系统的文本采用的是 "UTF-8" 编码,与 Windows 所采用的 "GBK" 编码不同,在 Linux 下,你需要将字符串转换成 “GBK” 编码,然后,再向服务器发送,接收到服务器端信息后,同样需要先将字符串转成 "UTF-8" 编码后再显示。这样,就可以避免出错了。

Taoyi 发表于 2022-1-5 17:46

一个可能是编码原因,一个是Linux上的文件路径与Windows上是不一样的,分隔符也要注意,建议多打印点日志出来看下
页: [1]
查看完整版本: C# ftp在linux报错