Как узнать, является ли URL http://www.test.com/abc.pdf файл или каталог? - PullRequest
2 голосов
/ 24 марта 2011

Я хочу написать некоторый код в Java, чтобы узнать, является ли данный URL-адрес файлом или каталогом.как я могу это сделать ??

Ответы [ 3 ]

8 голосов
/ 24 марта 2011

URL сами по себе не имеют понятия «файл» или «каталог».Содержимое URL-адреса определяется тем, что сервер отвечает на запрос.Если вы получите что-то с типом MIME application/pdf, то URL представляет файл PDF.Если вы получите что-нибудь еще, то это не файл PDF.

2 голосов
/ 24 марта 2011

Просто нет понятия «каталог» ни в одной из спецификаций URL / URI, спецификаций HTTP или реестра типов MIME.

Таким образом, у веб-сервера нет способа сообщить клиенту , что URL разрешается в каталог ... даже если он знает, что это значит.(И во многих случаях веб-сервер сам не знает / не заботится о каталогах; например, типичный веб-API RESTful не распознает эту концепцию.)

Возможны следующие варианты:

  • Попробуйте выбрать вещи и посмотреть, какой тип контента вы получаете.Но имейте в виду, что «каталог» может быть представлен веб-сервером как что-либо ... поэтому (в общем) невозможно надежно отличить каталоги от не-каталогов таким образом.

    Если вы хотите избежатьзагружая файл, вы можете отправить запрос HEAD вместо запроса GET.Это требует использования полноценной клиентской библиотеки HTTP, а не URLConnection.

  • Измените дизайн и реализацию своего приложения так, чтобы концепция «каталога» не требовалась.

  • Измените свое приложение так, чтобы it решало, что такое "каталог" и что такое "файл", основываясь исключительно на URL-адресах.(В общем случае это не будет работать ... потому что не существует общепризнанных соглашений для частей имени URL, которые позволили бы вам провести различие.)

  • Изменить на использованиесхема / протокол URL, в которой «каталог» является четко определенной концепцией.Например, «file:» или «ftp:».

0 голосов
/ 24 марта 2011

То, что вы получаете по URL, по сути не является «файлом» или «каталогом».В лучшем случае это поток данных с типом контента.Как правило, он становится «файлом» на стороне клиента либо путем сохранения его в файловой системе, либо во временном хранилище только для отображения.По сути, веб-сервер не может сообщить клиенту, что что-то является каталогом, использующим HTTP.

Вам либо придется создать некоторую бизнес-логику на стороне клиента, чтобы вывести «каталог» (возможнона основании URL, может быть, отсутствует расширение файла?) или используйте для этого другой протокол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...