class Aws::S3::FilePart
@api private
on disk.
A utility class that provides an IO-like interface to a portion of a file
def close
def close @file.close if @file end
def initialize(options = {})
(**options)
-
:size
(required, Integer
) -- The maximum number of bytes to -
:offset
(required, Integer
) -- The file part will read -
:source
(required, String, Pathname, File, Tempfile
) --
def initialize(options = {}) @source = options[:source] @first_byte = options[:offset] @last_byte = @first_byte + options[:size] @size = options[:size] @file = nil end
def open_file
def open_file @file = File.open(@source, 'rb') rewind end
def read(bytes = nil, output_buffer = nil)
def read(bytes = nil, output_buffer = nil) open_file unless @file read_from_file(bytes, output_buffer) end
def read_from_file(bytes, output_buffer)
def read_from_file(bytes, output_buffer) length = [remaining_bytes, *bytes].min data = @file.read(length, output_buffer) @position += data ? data.bytesize : 0 data.to_s unless bytes && (data.nil? || data.empty?) end
def remaining_bytes
def remaining_bytes @last_byte - @position end
def rewind
def rewind if @file @file.seek(@first_byte) @position = @first_byte end 0 end