Sha256: 55ed81735449a3b6a86ebd34be9c3be2e29805ef5c23f08f8f90767ed5a355d4

Contents?: true

Size: 1.61 KB

Versions: 6

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

require 'parallel'
require 'api_struct'

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 self.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)
            new.upload_chunk(chunk, links[link_id])
            next unless block_given?

            yield(
              chunk_size: CHUNK_SIZE,
              object: object,
              offset: offset,
              link_id: link_id,
              links: links,
              links_count: links.count
            )
          end
        end

        def api_root
          ''
        end

        def headers
          {}
        end

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

        private

        def default_params
          {}
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
uploadcare-ruby-3.3.2 lib/uploadcare/client/multipart_upload/chunks_client.rb
uploadcare-ruby-3.3.1 lib/uploadcare/client/multipart_upload/chunks_client.rb
uploadcare-ruby-3.3.0 lib/uploadcare/client/multipart_upload/chunks_client.rb
uploadcare-ruby-3.2.0 lib/uploadcare/client/multipart_upload/chunks_client.rb
uploadcare-ruby-3.1.1 lib/uploadcare/client/multipart_upload/chunks_client.rb
uploadcare-ruby-3.1.0 lib/uploadcare/client/multipart_upload/chunks_client.rb