Java загружает jpg с помощью JakartaFtpWrapper - делает файл нечитаемым

StackOverflow https://stackoverflow.com/questions/1810309

  •  05-07-2019
  •  | 
  •  

Вопрос

Я использовал JakartaFtpWrapper для загрузки файлов из клиентского Java-приложения на свой сервер (в целях резервного копирования).

Загружаемые файлы представляют собой текстовые файлы, файлы PNG и JPG.

Я заметил, что файлы jpg, действительные на локальном компьютере, каким-то образом становятся нечитаемыми (поврежденные файлы) на сервере (куда они были перенаправлены по FTP).Размер файла изображения аналогичен оригинальному, но в нем есть дефекты.

Вот код, который я использую для записи jpg на ЛОКАЛЬНЫЙ диск:

public static void writeJpeg(BufferedImage bfImg, String fileName, float quality) throws IOException{
FileImageOutputStream output = null;
try{
    Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
    ImageWriter writer = (ImageWriter)iter.next();
    ImageWriteParam iwp = writer.getDefaultWriteParam();
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    iwp.setCompressionQuality(quality);   // an integer between 0 and 1     
    File file = new File(fileName);
    output = new FileImageOutputStream(file);
    writer.setOutput(output);
    IIOImage image = new IIOImage(bfImg, null, null);
    writer.write(null, image, iwp);
}
finally{
    if (output != null){
        output.close();
    }
}

FTP-код прост:

JakartaFtpWrapper ftpClient = new JakartaFtpWrapper();
ftpClient.connectAndLogin(FTP_URL, FTP_USER, FTP_PASSWORD);
ftpClient.setPassiveMode(true);

File[] imageFiles = folder.listFiles()


  for (int j=0; j<imageFiles.length; j++){
        File imageFile = imageFiles[j];
        if (imageFile != null && imageFile.isFile() && (FileUtils.getFileSuffix(imageFile).equals("jpg") || FileUtils.getFileSuffix(imageFile).equals("png"))){ // upload only image files
            ftpClient.uploadFile(imageFile.getAbsolutePath(), imageFile.getName());
        }
    }

Спасибо, побежал

Это было полезно?

Решение

Что работает на сервере?Это FTP-сервер «из коробки» или что-то, что вы написали?

Изображения представляют собой двоичные данные.Если JakartaFtpWrapper предлагает какую-либо возможность перевести FTP-передачу в двоичный режим, вам следует это сделать;Я думаю, что наиболее вероятной причиной вашей проблемы является неудачная попытка по умолчанию обработать передачу в текстовом режиме.Если вы сравниваете небольшие изображения побайтно, вы должны увидеть возврат каретки ((char) 0x0d == (char) 13) добавляется или удаляется рядом с 0x0aх.Если да, то это ваша проблема.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top