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 試試用 FtpWebRequest
https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=net-6.0 本帖最后由 老伙计 于 2021-12-30 11:12 编辑
那是因为 Linux 系统的文本采用的是 "UTF-8" 编码,与 Windows 所采用的 "GBK" 编码不同,在 Linux 下,你需要将字符串转换成 “GBK” 编码,然后,再向服务器发送,接收到服务器端信息后,同样需要先将字符串转成 "UTF-8" 编码后再显示。这样,就可以避免出错了。 一个可能是编码原因,一个是Linux上的文件路径与Windows上是不一样的,分隔符也要注意,建议多打印点日志出来看下
页:
[1]