FTPでユーザーのアップロードした画像を保存します。 FTPサービスがサーバーServer-A
で実行されています。実際の問題は、私のローカルホストで動作しているWebアプリケーションからアップロードされたイメージがすべて動作するのを見たいときですが、同じサーバー上のTomcatにローカルアプリケーションをデプロイすると画像が正しく表示されません。FTPでダウンロードした画像が正しく表示されない
絵、私は地元のTomcatでWebアプリケーションを実行します。
同じ画像私は、リモートのTomcatでWebアプリケーションを実行します。
することができます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;
}
ありがとう!
ファイル内の正確な内容を確認しましたか? – lexicore
ファイルは同じFTP内で同じです。あるケースでは、私のローカルマシン上で実行されているWebアプリケーションからファイルをダウンロードします(動作します)。しかし、2番目のケースでは、リモートマシン上で実行されているWebアプリケーションから同じファイルをダウンロードします。正しく表示されません)。 – 0bj3ct
ローカルとリモートのTomcatで取得したファイルを比較します。明らかに第二のものはブロッケンですが、その違いは何ですか?ファイルが切り捨てられたり、特定のバイトが損なわれたりする可能性があります。 – lexicore