2016-08-15 7 views
2

Я использую почтовую сеть apache 3.5 для загрузки файлов на удаленный FTP-сервер и установки кодировки соединения в UTF-8, как показано ниже, перед тем как открыть соединение.Загрузка файла FTP - имя файла Ошибка кодирования

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} 
+0

убедитесь, что вы используете соответствующий набор символов повсюду, особенно в удаленной системе. отправка имени UTF-8 из вашего клиента бессмысленно, если удаленная файловая система (скажем) использует win-1252. –

+0

'ftpClient.setCharset (StandardCharsets.UTF_8);' –

+0

@Mark. Я использую тот же набор символов на стороне сервера. –

ответ

0

Я предполагаю, что там была ошибка с Викискладом чистого Apache, поэтому я не мигрировал в ftp4j и проблема больше не была.

<dependency> 
    <groupId>it.sauronsoftware</groupId> 
    <artifactId>ftp4j</artifactId> 
    <version>1.6</version> 
</dependency> 
Смежные вопросы