Class: ZipTricks::RemoteUncap
- Inherits:
-
Object
- Object
- ZipTricks::RemoteUncap
- Defined in:
- lib/zip_tricks/remote_uncap.rb
Overview
Alows reading the central directory of a remote ZIP file without
downloading the entire file. The central directory provides the
offsets at which the actual file contents is located. You can then
use the Range:
HTTP headers to download those entries separately.
Please read the security warning in FileReader
VERY CAREFULLY
before you use this module.
Class Method Summary collapse
-
.files_within_zip_at(uri, reader_class: ZipTricks::FileReader, **options_for_zip_reader) ⇒ Array<ZipTricks::FileReader::ZipEntry>
FileReader when reading files within the remote archive.
Instance Method Summary collapse
-
#initialize(uri) ⇒ RemoteUncap
constructor
A new instance of RemoteUncap.
-
#request_object_size ⇒ Fixnum
Only used internally when reading the remote ZIP.
-
#request_range(range) ⇒ String
Only used internally when reading the remote ZIP.
Constructor Details
#initialize(uri) ⇒ RemoteUncap
Returns a new instance of RemoteUncap.
26 27 28 |
# File 'lib/zip_tricks/remote_uncap.rb', line 26 def initialize(uri) @uri = URI(uri) end |
Class Method Details
.files_within_zip_at(uri, reader_class: ZipTricks::FileReader, **options_for_zip_reader) ⇒ Array<ZipTricks::FileReader::ZipEntry>
FileReader when reading files within the remote archive
17 18 19 20 21 22 23 24 |
# File 'lib/zip_tricks/remote_uncap.rb', line 17 def self.files_within_zip_at(uri, reader_class: ZipTricks::FileReader, **) fetcher = new(uri) fake_io = ZipTricks::RemoteIO.new(fetcher) reader = reader_class.new reader.read_zip_structure(io: fake_io, **) end |
Instance Method Details
#request_object_size ⇒ Fixnum
Only used internally when reading the remote ZIP.
44 45 46 47 |
# File 'lib/zip_tricks/remote_uncap.rb', line 44 def request_object_size http = Net::HTTP.start(@uri.hostname, @uri.port) http.request_head(@uri)['Content-Length'].to_i end |
#request_range(range) ⇒ String
Only used internally when reading the remote ZIP.
34 35 36 37 38 39 |
# File 'lib/zip_tricks/remote_uncap.rb', line 34 def request_range(range) request = Net::HTTP::Get.new(@uri) request.range = range http = Net::HTTP.start(@uri.hostname, @uri.port) http.request(request).body end |