Правильно получить файл с FTP-сервера с помощью FTP-клиента в Java - PullRequest
0 голосов
/ 18 января 2019

Я могу успешно извлечь файл с FTP-сервера, используя метод ftpClient.retrieveFile, но похоже, что по пути некоторые байты теряются. Окончательный загруженный файл не такой, как на FTP-клиенте. Я приложил картинку и мой код. Чего мне не хватает?

Изображение слева - ожидаемый результат downloaded image on the right

//Code to get file outputstream after FTP connection
//...
return ftpClient.retrieveFile(remotePath, outputStream);
//...
//Code in my controller to download file
ByteArrayOutputStream outputStream = ftpService.Download(fileDTO);
//Convert it to a byte[]
final byte[] bytes = outputStream.toByteArray();
// To convert bytes to an InputStream
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
final InputStreamResource resource = new InputStreamResource(inputStream);
File file = new File(String.valueOf(System.currentTimeMillis())
    + fileDTO.getStorageFilename().substring(fileDTO.getStorageFilename().lastIndexOf('.')));
FileUtils.writeByteArrayToFile(file, bytes);
final HttpHeaders headers = new HttpHeaders();
final String headerKey = "Content-Disposition";
final String headerValue = String.format("attachment; filename=\"%s\"",
    file.getName() + "." + fileDTO.getOriginalFilename().split("\\.")[1]);
headers.set(headerKey, headerValue);
long length = file.length();
//Remove downloaded file.
file.delete();
return ResponseEntity.ok().headers(headers).contentLength(length)
    .contentType(org.springframework.http.MediaType.APPLICATION_OCTET_STREAM).body(resource);
...