Partial Read From URL

E

Elliot Temple

Can anyone see a problem with this code to read only 20k from a URL? The
http connection will get closed, right?

Is there a better way to do this? My goal is to download the start of
mp3 files and then estimate their duration without downloading the
entire file.

def partial_uri_read(uri)
u = URI.parse(uri)
s = ""
Net::HTTP.start(u.host, u.port) do |http|
http.request_get(u.path) do |response|
response.read_body do |chunk|
s << chunk
return s if s.size > 20000
end
end
end
s
end

Thanks
Elliot Temple
 
A

ara.t.howard

Can anyone see a problem with this code to read only 20k from a URL?
The
http connection will get closed, right?

Is there a better way to do this? My goal is to download the start of
mp3 files and then estimate their duration without downloading the
entire file.

def partial_uri_read(uri)
u = URI.parse(uri)
s = ""
Net::HTTP.start(u.host, u.port) do |http|
http.request_get(u.path) do |response|
response.read_body do |chunk|
s << chunk
return s if s.size > 20000
end
end
end
s
end

Thanks
Elliot Temple


maybe try


require 'open-uri'

uri = ......

open(uri){|fd| fd.read 20000}




a @ http://codeforpeople.com/
 
E

Elliot Temple

Ara said:
maybe try


require 'open-uri'

uri = ......

open(uri){|fd| fd.read 20000}

I did try that, but it downloads the entire file in my tests. I tried it
on a large file and it takes minutes to return, whereas my code returns
in a couple seconds. Am I missing something?
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]

Elliot
 
M

Michael Morin

Elliot said:
Can anyone see a problem with this code to read only 20k from a URL? The
http connection will get closed, right?

Is there a better way to do this? My goal is to download the start of
mp3 files and then estimate their duration without downloading the
entire file.

def partial_uri_read(uri)
u = URI.parse(uri)
s = ""
Net::HTTP.start(u.host, u.port) do |http|
http.request_get(u.path) do |response|
response.read_body do |chunk|
s << chunk
return s if s.size > 20000
end
end
end
s
end

Thanks
Elliot Temple

You can try using the Range header in HTTP. Not all servers have it
enabled I think (or that's what 3 minutes playing with telnet tells me).
Using range you can define which bytes of the file you want to
download, so the whole file is not downloaded. You can use this to
download the header and use the length of the file to estimate its length.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,736
Latest member
AdolphBig6

Latest Threads

Top