Class: Uploadcare::Operations::MultipartUpload
- Inherits:
-
Object
- Object
- Uploadcare::Operations::MultipartUpload
- Defined in:
- lib/uploadcare/operations/multipart_upload.rb
Overview
Handles the complete multipart upload workflow.
Multipart upload is used for files larger than the multipart threshold (default: 100MB). The process:
- Start upload → get UUID and presigned URLs
- Upload file parts to presigned URLs (optionally in parallel)
- Complete upload → finalize and get file info
Constant Summary collapse
- CHUNK_SIZE =
5MB default chunk size
5_242_880
Instance Attribute Summary collapse
-
#config ⇒ Uploadcare::Configuration
readonly
Configuration.
-
#upload_client ⇒ Uploadcare::Api::Upload
readonly
Upload API client.
Instance Method Summary collapse
-
#initialize(upload_client:, config:) ⇒ MultipartUpload
constructor
A new instance of MultipartUpload.
-
#upload(file:, request_options: {}, **options) {|Hash| ... } ⇒ Uploadcare::Result
Execute the full multipart upload flow.
Constructor Details
#initialize(upload_client:, config:) ⇒ MultipartUpload
Returns a new instance of MultipartUpload.
27 28 29 30 |
# File 'lib/uploadcare/operations/multipart_upload.rb', line 27 def initialize(upload_client:, config:) @upload_client = upload_client @config = config end |
Instance Attribute Details
#config ⇒ Uploadcare::Configuration (readonly)
Returns Configuration.
23 24 25 |
# File 'lib/uploadcare/operations/multipart_upload.rb', line 23 def config @config end |
#upload_client ⇒ Uploadcare::Api::Upload (readonly)
Returns Upload API client.
20 21 22 |
# File 'lib/uploadcare/operations/multipart_upload.rb', line 20 def upload_client @upload_client end |
Instance Method Details
#upload(file:, request_options: {}, **options) {|Hash| ... } ⇒ Uploadcare::Result
Execute the full multipart upload flow.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/uploadcare/operations/multipart_upload.rb', line 39 def upload(file:, request_options: {}, **, &block) Uploadcare::Result.capture do prepared_file = Uploadcare::Internal::UploadIo.wrap(file) file_size = prepared_file.size filename = prepared_file.original_filename content_type = MIME::Types.type_for(prepared_file.path).first&.content_type || 'application/octet-stream' part_size, threads = () start_response = Uploadcare::Result.unwrap( upload_client.files.multipart_start( filename: filename, size: file_size, content_type: content_type, request_options: , ** ) ) uuid = start_response['uuid'] presigned_urls = start_response['parts'] if threads > 1 upload_parts_parallel(prepared_file, presigned_urls, part_size, threads, &block) else upload_parts_sequential(prepared_file, presigned_urls, part_size, &block) end Uploadcare::Result.unwrap( upload_client.files.multipart_complete(uuid: uuid, request_options: ) ) { 'uuid' => uuid } ensure prepared_file&.close! end end |