Вы хотите проверить, будет ли загрузка успешной? Или вы хотите проверить, что то, что загружено, является, по сути, изображением?
В первом случае единственный способ проверить - попытаться получить к нему доступ и посмотреть, какой код ответа HTTP вы получите. Вы можете отправить запрос HTTP HEAD
, чтобы получить код ответа, без фактической загрузки изображения, но если вы собираетесь идти вперёд и загружать изображение в любом случае (если оно выполнено успешно), то отправка отдельного запроса кажется пустой тратой времени (и пропускной способности).
В качестве альтернативы, если вы действительно хотите проверить, что то, что вы загружаете, является допустимым файлом изображения, вы должны прочитать весь файл, чтобы проверить его на предмет коррупции. Но если вы просто хотите проверить, что расширение файла является точным, этого должно быть достаточно, чтобы проверить первые несколько байтов файла. Все изображения GIF начинаются с текста ASCII GIF87
или GIF89
в зависимости от используемой спецификации GIF. Изображения PNG начинаются с текста ASCII PNG
, а изображения JPEG имеют некоторое магическое число, которое, как представляется, 0xd8ffe0ff
на основе JPEG, на которые я смотрел. (Вы должны сделать некоторые исследования и проверить это, попробуйте Wikipedia для ссылок) Имейте в виду, что для получения даже первых нескольких байтов изображения вам нужно будет отправить HTTP-запрос, который может вернуть 404 (и в этом если у вас нет изображения для проверки).
Я думаю, что это хороший ответ. Просто стыдно, что использование ожидаемых веб-методов может быть разрушено с ошибками на стороне сервера. Тем не менее, рекомендации во втором абзаце звучат. :) – jheriko