Sha256: 6907dc1de1a977078317434edb12a20e08b68fcfb8371620750dfdc26d8c44b1

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

require 'parallel'

module Uploadcare
  module Client
    module MultipartUpload
      # This class splits file into chunks of set chunk_size
      # and uploads them into cloud storage.
      # Used for multipart uploads
      # @see https://uploadcare.com/api-refs/upload-api/#tag/Upload/paths/https:~1~1uploadcare.s3-accelerate.amazonaws.com~1%3C%3Cpresigned-url%3E/put
      class ChunksClient < ApiStruct::Client
        CHUNK_SIZE = 5_242_880

        # In multiple threads, split file into chunks and upload those chunks into respective Amazon links
        # @param object [File]
        # @param links [Array] of strings; by default list of Amazon storage urls
        def upload_chunks(object, links)
          Parallel.each(0...links.count, in_threads: Uploadcare.config.upload_threads) do |link_id|
            offset = link_id * CHUNK_SIZE
            chunk = IO.read(object, CHUNK_SIZE, offset)
            upload_chunk(chunk, links[link_id])
          end
        end

        def api_root
          ''
        end

        def headers
          {}
        end

        private

        def upload_chunk(chunk, link)
          put(path: link, body: chunk, headers: { 'Content-type': 'application/octet-stream' })
        end

        def default_params
          {}
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
uploadcare-ruby-3.0.5 lib/uploadcare/client/multipart_upload/chunks_client.rb
uploadcare-ruby-3.0.3 lib/uploadcare/client/multipart_upload/chunks_client.rb