Вопрос по java, bytearray, itext, jpeg, image – Ошибка чтения файла JPEG из байта []

1

У кого-нибудь была проблема с загрузкой файлов JPEG в java? Один из наших клиентов отправляет файлы, которые не могут быть разрешены, но эти же файлы могут быть открыты в окнах. (остальные 99% файлов jpeg, которые мы получаем, обрабатывают без проблем)

Я попытался пару библиотек, чтобы прочитать эти:

itextpdf : com.itextpdf.text.Jpeg (getInstance(imageData) - gives  "java.io.IOException: Premature EOF while reading JPG."
sanselan : org.apache.sanselan.ImageInfo ( Sanselan.getImageInfo(imageData) gives "java.io.IOException: Invalid Segment: insufficient data")
where imageData is a byte[]

Приведенные здесь ошибки указывают на то, что jpegs повреждены, однако это не объясняет, почему они по-прежнему доступны для просмотра.

Если у кого-нибудь есть предложения, буду очень признателен

Спасибо

Проверьте наличие проблем с кодировкой. Возможно на обоих концах. Вы или ваш клиент можете использовать какой-то класс (Reader возможно), который преобразует байты в зависимости от локали / кодировки и разбивает данные. npe
Вы пытались уменьшить размер изображения с помощью краски? VirtualTroll
Ваши последние комментарии к @Petr & amp; Я сам готовлюсь к ответу. Возможно, вам следует ввести ответ, теперь вы знаете больше. Andrew Thompson
"this does not explain why they are still viewable."  Каким приложением на какой ОС? Обратите внимание, что большинство зрителей изображения делают все возможное, чтобы угадать данные изображения из поврежденных файлов изображений. Andrew Thompson
Я попытаюсь преобразовать изображения с помощью надежного инструмента для работы с изображениями, такого какGraphicsMagick или жеImageMagick, Просто преобразуйте проблемный файл JPG в новый файл JPG и попробуйте его обработать. Возможно, что проблемные JPG являются нестандартными или поврежденными, но некоторые надежные декодеры могут справиться с этим (возможно, именно поэтому их можно просматривать). Это просто обходной путь, но это может помочь. Petr Pudlák

Ваш Ответ

1   ответ
1

«Решение» Я пошел, чтобы запустить байтовый массив, который мы получаем через наш текущий процесс, который идентифицирует тип. то я беру массив байтов и принудительно сохраняю его в JPEG. Это можно затем перечитать и протолкнуть обратно через текущий процесс.

Немного хакерский, но это всего лишь работа в течение нескольких месяцев.

Спасибо всем за помощь здесь!

@ashishjmeshram - я боюсь, что давным-давно я действительно "исправил" этот. но если я правильно помню, я просто взял входящий поток, вывел его во временный файл на сервере и перечитал этот файл. Вряд ли то, что я бы назвал решением ... но оно сработало для этой цели. Causteau
Я также сталкиваюсь с той же проблемой. Как вы точно решили проблему? Любая помощь будет оценена. Спасибо,

Похожие вопросы