如何在不下载文件的情况下检查文件是否存在?

Ph0*_*n1x 19 ruby ruby-on-rails http

我需要编写代码,通过检查其URL来确定文件是否存在.

目前我实现了这个:

error_code = 400;
response = Net::HTTP.get_response(URI(url));
return response.code.to_i < error_code;
Run Code Online (Sandbox Code Playgroud)

但是,它不能正常工作,因为每次下载文件时,如果我有大文件或很多文件,这真的很慢.

如何在不下载文件的情况下确定远程端是否存在文件?

Sha*_*cci 31

如果你想使用Net :: HTTP,你可以这样做:

uri = URI(url)

request = Net::HTTP.new uri.host
response= request.request_head uri.path
return response.code.to_i == 200
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是,Net :: HTTP`包含在Ruby规范中. (2认同)
  • 请注意其他有效的响应代码,例如 301,该文件实际上可以存在于要从第一个请求中检索的下一个 url 中。即:tinyurl (2认同)

Jos*_*ory 6

做这样的事情

require "rest-client"

begin
  exists = RestClient.head("http://google.com").code == 200
rescue RestClient::Exception => error
  exists = (error.http_code != 404) 
end
Run Code Online (Sandbox Code Playgroud)

那么"exists"是一个布尔值,取决于它是否存在.这只会获取标题信息,而不是文件,因此对于小文件或大文件应该是相同的.