簡體   English   中英

上傳到 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安裝 package 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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM