From: Michael Morin Date: 2008-11-07T12:31:31+09:00 Subject: Re: Partial Read From URL Elliot Temple wrote: > 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.