2017-01-27 11 views
0

Я сохраняю загруженные изображения на FTP. Служба FTP работает на сервере Server-A. Фактическая проблема заключается в том, когда я хочу видеть загруженное изображение из веб-приложения, работающего на моем локальном хосте, все работает, но когда я развертываю локальное приложение в Tomcat, запущенном на том же сервере Server-A, изображения отображаются неправильно.Загрузка FTP скачана неправильно Отображается

Изображение при запуске веб-приложения в локальной Tomcat:

enter image description here

Та же картина, когда я запускаю веб-приложения в удаленном сервере Tomcat:

enter image description here

Вы можете см., что второе изображение отображается неправильно. Также хочу упомянуть, что FTP тот же.

Я использую Spring с библиотекой Apache FtpClient для загрузки и загрузки изображений.

исходный код контроллера:

@RequestMapping(value = "/{id:\\d+}/image", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE) 
protected byte[] getUserImage(BaseForm form, 
           @PathVariable("id") int userId) { 

    try { 
     User user = checkToken(form.getToken()); 

     log.info("https://stackoverflow.com/users/{id}/image [GET]. User: " + user + ", form: " + form + ", User id: " + userId); 

     FileWrapper image = service.getUserImage(userId); 

     if(image != null) { 
      return ftpService.downloadFtpFile(image.getName()); 
     } 
    } 
    catch(Exception e) { 
     log.error(e.getMessage(), e); 
    } 

    return null; 
} 

FtpService исходный код:

public byte[] downloadFtpFile(String filePath) throws IOException { 

    FTPClient client = new FTPClient(); 

    try { 
     client.connect(host, port); 
     if(!client.login(username, password)) { 
      throw new AdminException("Invalid ftp username/password"); 
     } 

     client.enterLocalPassiveMode(); 

     try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { 
      client.retrieveFile(filePath, outputStream); 
      return outputStream.toByteArray(); 
     } 
    } 
    catch(Exception e) { 
     log.error(e.getMessage(), e); 
    } 
    finally { 
     if(client.isConnected()) { 
      client.logout(); 
      client.disconnect(); 
     } 
    } 

    return null; 
} 

Заранее спасибо!

+0

Вы проверили, что именно в файлах? – lexicore

+0

Файл тот же самый в одном FTP. В одном случае я загружаю файл из веб-приложения, работающего на моем локальном компьютере (он работает), но во втором случае я загружаю тот же файл из веб-приложения, запущенного на удаленном компьютере, где находится служба FTP (этот файл не правильно распределяется). – 0bj3ct

+1

Сравните файлы, которые вы получаете на локальном и удаленном Tomcat. Очевидно, второй - брок, вопрос в чем разница. Возможно, файл усечен или, возможно, некоторые байты испорчены. – lexicore

ответ

1

Если вы не установили, что FTP-передача является бинарной (в отличие от ASCII), она «преобразует концы строк» ​​(или то, что, по ее мнению, является концом строки), что приведет к повреждению изображения.