Загрузка файла FTP - ошибка кодировки имени файла

Я использую Apache commons-net 3.5 для загрузки файлов на удаленный FTP-сервер и устанавливаю кодировку соединения в UTF-8, как показано ниже, перед открытием соединения.

ftpClient.setAutodetectUTF8(true);
ftpClient.setControlEncoding("UTF-8");

И это та часть, которая отправляет файл

private void uploadFile(byte[] data, String path, String fileName, FTPClient ftpClient) throws IOException {
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
    boolean uploadSuccess = ftpClient.storeUniqueFile(fileName, new  ByteArrayInputStream(data));

Здесь проблема; при отправке файлов, имя которых содержит турецкие символы, файл результатов именуется неправильно. Подобно,

Kimlikş.pdf -> KimlikÅ.pdf

Но если я использую ftp4j, все работает нормально. У кого-нибудь было это раньше? Данные отправляются некорректно с моей стороны. Я контролировал трафик с помощью Microsoft Network Monitor. Вот необработанный запрос:

FTP FTP:Request from Port 62642,'STOR KimlikÅ.pdf'  {TCP:5879, IPv4:134}

2 ответа

Решение

Я предполагаю, что была ошибка в apache commons-net, поэтому я перешел на ftp4j, и проблемы больше не было.

<dependency>
    <groupId>it.sauronsoftware</groupId>
    <artifactId>ftp4j</artifactId>
    <version>1.6</version>
</dependency>

попробуйте использовать WinSCP - он работает как шарм.

https://winscp.net/eng/download.php

ни FileZilla, ни TotalCommander - только WinSCP.

  • и снова скопировать (например, у меня было около 6k файлов и только 50 с кириллицей) только дать на вопрос вопрос «нет для всех», и WinSCP копирует только оставшиеся файлы. большой !

5 звезд бесплатному программному обеспечению!

Другие вопросы по тегам