上传到ftp时文件名中的西里尔文# C#
Cyrillic in the file name when upload to ftp C #
我正在编写一个将文件上传到远程 ftp 服务器的程序。但是,下载的文件有时包含西里尔文。文件内容正确加载,但名称失真。我知道这是由于编码造成的。
我尝试使用 Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1251).GetBytes(file.FileName))
和其他编码。没有帮助。同时,存储在同一个 ftp 上的 php 脚本正确上传带有西里尔字母的文件。
public void FtpUpload(IFormFile file, string filePath)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://xxx.xxx.xx.xxx/" + filePath);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("username", "pass");
byte[] fileBytes;
if (file.Length > 0)
{
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
fileBytes = ms.ToArray();
}
}
else return;
request.ContentLength = fileBytes.Length;
using (Stream request_stream = request.GetRequestStream())
{
request_stream.Write(fileBytes, 0, fileBytes.Length);
request_stream.Close();
}
}
filePath = "Тест.pdf"
我尝试使用 HttpUtility.UrlEncode(filePath)
。没有任何帮助。请告诉我,如何处理这个问题?
已找到解决方案。在浏览了更多论坛后,我遇到了以下解决方案:
通过NuGet Package Management
安装包System.Net.FtpClient
。
然后我们编写如下代码:
public void FtpClientUpload(IFormFile file, string filePath)
{
FtpClient ftp = new FtpClient();
ftp.Host = "xxx.xxx.xx.xxx";
ftp.Credentials = new NetworkCredential("username", "pass");
ftp.Encoding = Encoding.GetEncoding(1251);
using (var remote = ftp.OpenWrite( filePath, FtpDataType.Binary))
file.CopyTo(remote);
}
我正在编写一个将文件上传到远程 ftp 服务器的程序。但是,下载的文件有时包含西里尔文。文件内容正确加载,但名称失真。我知道这是由于编码造成的。
我尝试使用 Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1251).GetBytes(file.FileName))
和其他编码。没有帮助。同时,存储在同一个 ftp 上的 php 脚本正确上传带有西里尔字母的文件。
public void FtpUpload(IFormFile file, string filePath)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://xxx.xxx.xx.xxx/" + filePath);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("username", "pass");
byte[] fileBytes;
if (file.Length > 0)
{
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
fileBytes = ms.ToArray();
}
}
else return;
request.ContentLength = fileBytes.Length;
using (Stream request_stream = request.GetRequestStream())
{
request_stream.Write(fileBytes, 0, fileBytes.Length);
request_stream.Close();
}
}
filePath = "Тест.pdf"
我尝试使用 HttpUtility.UrlEncode(filePath)
。没有任何帮助。请告诉我,如何处理这个问题?
已找到解决方案。在浏览了更多论坛后,我遇到了以下解决方案:
通过NuGet Package Management
安装包System.Net.FtpClient
。
然后我们编写如下代码:
public void FtpClientUpload(IFormFile file, string filePath)
{
FtpClient ftp = new FtpClient();
ftp.Host = "xxx.xxx.xx.xxx";
ftp.Credentials = new NetworkCredential("username", "pass");
ftp.Encoding = Encoding.GetEncoding(1251);
using (var remote = ftp.OpenWrite( filePath, FtpDataType.Binary))
file.CopyTo(remote);
}