#ruby
#ruby
Вопрос:
Можно ли как-то проверить, существует ли файл, фактически не загружая его?
Например, у меня есть этот большой (~ 40 МБ) файл:
http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm
Это не имеет строгого отношения к ruby, но было бы неплохо, если бы отправитель мог установить длину содержимого.
RestClient.get "http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",
headers: {"Content-Length" => 100}
Ответ №1:
Попробуйте RestClient.head
. (См https://www.rfc-editor.org/rfc/rfc9110.html#name-head )
Метод HTTP HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН отправлять содержимое в ответе. HEAD используется для получения метаданных о выбранном представлении без передачи данных его представления, часто ради тестирования гипертекстовых ссылок или поиска последних изменений.
Комментарии:
1. Да, и прошло 15 секунд, прежде чем я смог дать вам согласие . 🙂
Ответ №2:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
См. Раздел 9.4, касающийся запроса HEAD .
Ответ №3:
Мы можем использовать wget:
def file_exists?(full_file_path)
resp = `wget --spider -v #{full_file_path} amp;amp; echo 1 || echo 0`
resp.to_i.zero? ? false : true
end