open(source_url)
일부의 I/O 핸들을 반환하기 때문에 File.basename(open(source_url))
가 작동하지 않습니다 정렬, 아니 문자열처럼 File.basename
기대하고있다. URL이 어떤 path/to/service/with/parameters/in/line/like/this
타입 인코딩을 사용하지 않는
File.basename(source_url)
는 작업의 더 나은 기회가있을 것입니다.
Ruby의 URI 라이브러리에는 유용한 도구가 있습니다. 예 :
File.basename(URI.parse(source_url).path)
이 출발점이됩니다.
require 'uri'
File.basename(URI.parse('http://www.example.com/path/to/file/index.html').path
# => "index.html"
과 : 예를 들어
File.basename(URI.parse('http://www.example.com/path/to/file/index.html?foo=bar').path)
# => "index.html"
내가 너무하는 방법과 파일 크기를 retreive 수 있는지 알 수 있습니까?
로컬 HTTP 물건을 테스트하는 좋은 방법은, 명령 줄에서 gem server
을 실행하고 보석은 설명서의 내용에 대한 약간의 웹 서버를 불 수 있도록하는 것입니다 :
require 'open-uri'
html_doc = open('http://0.0.0.0:8808/') do |io|
puts io.size
io.read
end
puts html_doc.size
# => 114350
# => 114350
당신이 블록을 사용 OpenURI의 open
명령을 사용하면 Tempfile
클래스의 인스턴스 인 블록 변수에서 연결에 대한 많은 정보에 액세스 할 수 있습니다. 따라서 size
을 사용하여 들어오는 파일의 크기를 확인할 수 있습니다.
작은 파일의 경우에는 문제가 없지만 큰 파일을 가져 오는 경우 Net :: HTTP를 사용하여 head
요청을 보내고 조사 할 수 있습니다. 일 수도 있고 일 수 있습니다. 나는 이 일 수도 있다고 말한다. 때로는 서버가 동적 컨텐츠의 경우 리턴 될 내용이나 말하기를 꺼리는 CGI 또는 서브 서비스가 리턴하는 컨텐츠를 알 수 없기 때문입니다.
"헤드"요청을 사용하는 장점은 서버가 전체 콘텐츠 (헤더 만)를 반환하지 않는다는 것입니다. 따라서 과거에는 head
을 사용하여 요청한 데이터를 얻을 수 있는지 알아 보았습니다. 그렇지 않은 경우 일반 응답 get
을 사용하여 전체 응답을 보내야합니다.
감사합니다. 파일 크기를 모두 검색 할 수 있고 파일의 모든 MB를 기다리지 않고 확인할 수 있습니까? – ElektroStudios
Content-length 헤더를 살펴보십시오. – Danyel