2017-01-27 14 views
0

FTPでユーザーのアップロードした画像を保存します。 FTPサービスがサーバーServer-Aで実行されています。実際の問題は、私のローカルホストで動作しているWebアプリケーションからアップロードされたイメージがすべて動作するのを見たいときですが、同じサーバー上のTomcatにローカルアプリケーションをデプロイすると画像が正しく表示されません。FTPでダウンロードした画像が正しく表示されない

絵、私は地元のTomcatでWebアプリケーションを実行します。

enter image description here

同じ画像私は、リモートのTomcatでWebアプリケーションを実行します。

enter image description here

することができます2番目の画像が正しく表示されていないことを確認してください。また、FTPが同じものであることに言及したい。

私は、画像のアップロード/ダウンロード機能のためにApache FtpClientライブラリとともにSpringを使用しています。

コントローラのソースコード:

@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内で同じです。あるケースでは、私のローカルマシン上で実行されているWebアプリケーションからファイルをダウンロードします(動作します)。しかし、2番目のケースでは、リモートマシン上で実行されているWebアプリケーションから同じファイルをダウンロードします。正しく表示されません)。 – 0bj3ct

+1

ローカルとリモートのTomcatで取得したファイルを比較します。明らかに第二のものはブロッケンですが、その違いは何ですか?ファイルが切り捨てられたり、特定のバイトが損なわれたりする可能性があります。 – lexicore

答えて

1

FTP転送をバイナリ(ASCIIではなく)に設定していない場合、画像を破損する「行末を変換する」(または行末と思われるもの)となります。

関連する問題