Загрузка файла 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 звезд бесплатному программному обеспечению!