Как определить, есть ли в URL-адресе файл изображения или нет?

#java #image #android-studio #url #android-glide

Вопрос:

Проблема:

Я использую библиотеку Glide в Android Studio для загрузки изображений в просмотр изображений с URL-адреса, проблема может заключаться в том, что иногда в URL-адресе нет изображения, то есть URL-адрес существует, но он не содержит никакого изображения. Например:

1) Этот URL-адрес содержит изображение:

https://static.hogarmania.com/archivos/201210/merienda-321x171x80xX.jpg

2) Но этот URL-адрес не содержит изображения

https://www.petitchef.es/imgupl/recipe/md-155916p233026.jpg

Вопрос:

Есть ли какой-либо способ, чтобы перед загрузкой изображения с помощью библиотеки Glide я мог проверить, содержит ли полученный мной URL-адрес изображение или нет?

Комментарии:

1. Учитывая, что оба URL-адреса есть .jpg в ссылке, но один не содержит изображения, тогда нет, как вы узнаете, не загрузив сначала содержимое ссылки? В противном случае перед вызовом библиотеки glide выполните санитарную проверку данных (на наличие 404 или других ошибок).

2. Выполните команду HEAD и посмотрите на заголовок Content-type ответа.

3. В Glide нет встроенного механизма для вашего сценария. Вам придется справиться с этим вручную.

4. Ресурс, на который ссылается второй URL — адрес, не существует.

Ответ №1:

  • Шаг 1: Вы должны проверить ответ на URL-адрес. Вы можете обратиться к приведенному ниже коду. Обратитесь к документации здесь.
 URL u = new URL ( "http://www.example.com/");
HttpURLConnection hUC =  ( HttpURLConnection )  u.openConnection (); 
hUC.setRequestMethod ("GET");  //OR  hUC.setRequestMethod ("HEAD"); 
hUC.connect () ; 
int code = hUC.getResponseCode() ;
System.out.println(code);
 
  • Шаг 2: Проверьте, является ли это изображение с приведенным ниже кодом.
 URLConnection connection = null;
            try {
                connection = new URL(imageURL).openConnection();
            } catch (IOException e) {
                e.printStackTrace();
            }
String contentType = connection.getHeaderField("Content-Type");
boolean img = contentType.startsWith("image/"); // if img is true then it is an image
 
  • Вы также можете добавить заполнитель в изображение с помощью Glide. Вы можете ознакомиться с заполнителями здесь.

Комментарии:

1. Это извлекает ресурс, который специально не был нужен, и не указывает, было ли это изображение, о котором просил ОП.

2. Обе ссылки, указанные в вопросе, были изображениями, но сервер не был готов обработать запрос в одном из них. Нужно проверить, активна ссылка или нет, прежде чем проверять, было ли это изображение. Тем не менее, я отредактирую свой ответ.

3. Можно проверить, активна ли «ссылка» и является ли она изображением одновременно. Вам не нужны два URL цикла s, два HttpURLConnections и два цикла HTTP-запроса/ответа. И одна из ссылок вообще не существовала: она получила 404 Не найдена. Ничего общего с тем, что сервер не «готов обработать запрос»..