Class: Uploadcare::Operations::UploadRouter
- Inherits:
-
Object
- Object
- Uploadcare::Operations::UploadRouter
- Defined in:
- lib/uploadcare/operations/upload_router.rb
Overview
Routes upload requests to the appropriate Upload API endpoint.
Handles the decision logic for choosing between:
- Direct upload (small files < multipart threshold)
- Multipart upload (large files >= multipart threshold)
- URL upload (string URLs)
- Batch upload (arrays of files)
Instance Attribute Summary collapse
-
#client ⇒ Uploadcare::Client
readonly
Client instance.
Instance Method Summary collapse
-
#file_info(file_id:, request_options: {}) ⇒ Hash
Get file info from Upload API (without secret key).
-
#initialize(client:) ⇒ UploadRouter
constructor
A new instance of UploadRouter.
-
#multipart_upload(file:, request_options: {}, **options, &block) ⇒ Uploadcare::Resources::File
Upload a large file using multipart upload.
-
#upload(source, request_options: {}, **options, &block) ⇒ Uploadcare::Resources::File, ...
Upload a file, URL, or array of files.
-
#upload_file(file:, request_options: {}, **options) ⇒ Uploadcare::Resources::File
Upload a single file directly.
-
#upload_files(files:, request_options: {}, **options) ⇒ Array<Uploadcare::Resources::File>
Upload multiple files directly.
-
#upload_from_url(url:, request_options: {}, **options) ⇒ Uploadcare::Resources::File, Hash
Upload a file from URL.
-
#upload_from_url_status(token:, request_options: {}) ⇒ Hash
Get upload-from-URL status.
Constructor Details
#initialize(client:) ⇒ UploadRouter
Returns a new instance of UploadRouter.
21 22 23 |
# File 'lib/uploadcare/operations/upload_router.rb', line 21 def initialize(client:) @client = client end |
Instance Attribute Details
#client ⇒ Uploadcare::Client (readonly)
Returns Client instance.
18 19 20 |
# File 'lib/uploadcare/operations/upload_router.rb', line 18 def client @client end |
Instance Method Details
#file_info(file_id:, request_options: {}) ⇒ Hash
Get file info from Upload API (without secret key).
130 131 132 133 134 |
# File 'lib/uploadcare/operations/upload_router.rb', line 130 def file_info(file_id:, request_options: {}) Uploadcare::Result.unwrap( client.api.upload.files.info(file_id: file_id, request_options: ) ) end |
#multipart_upload(file:, request_options: {}, **options, &block) ⇒ Uploadcare::Resources::File
Upload a large file using multipart upload.
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/uploadcare/operations/upload_router.rb', line 102 def multipart_upload(file:, request_options: {}, **, &block) response = Uploadcare::Result.unwrap( Uploadcare::Operations::MultipartUpload.new( upload_client: client.api.upload, config: client.config ).upload(file: file, request_options: , **, &block) ) return response unless response.is_a?(Hash) && response['uuid'] Uploadcare::Resources::File.new(response, client) end |
#upload(source, request_options: {}, **options, &block) ⇒ Uploadcare::Resources::File, ...
Upload a file, URL, or array of files.
Automatically routes to the appropriate upload method based on the source type:
- File/IO objects >= multipart threshold → multipart upload
- File/IO objects < multipart threshold → direct upload
- Arrays → batch direct upload
- Strings → URL upload
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/uploadcare/operations/upload_router.rb', line 38 def upload(source, request_options: {}, **, &block) if big_file?(source) multipart_upload(file: source, request_options: , **, &block) elsif file?(source) upload_file(file: source, request_options: , **) elsif source.is_a?(Array) upload_files(files: source, request_options: , **) elsif source.is_a?(String) upload_from_url(url: source, request_options: , **) else raise ArgumentError, "Expected input to be a File/Array/URL, given: `#{source}`" end end |
#upload_file(file:, request_options: {}, **options) ⇒ Uploadcare::Resources::File
Upload a single file directly.
58 59 60 61 62 63 64 |
# File 'lib/uploadcare/operations/upload_router.rb', line 58 def upload_file(file:, request_options: {}, **) response = Uploadcare::Result.unwrap( client.api.upload.files.direct_many(files: [file], request_options: , **) ) file_name, uuid = response.first Uploadcare::Resources::File.new({ uuid: uuid, original_filename: decode_uploaded_filename(file_name) }, client) end |
#upload_files(files:, request_options: {}, **options) ⇒ Array<Uploadcare::Resources::File>
Upload multiple files directly.
72 73 74 75 76 77 78 79 |
# File 'lib/uploadcare/operations/upload_router.rb', line 72 def upload_files(files:, request_options: {}, **) response = Uploadcare::Result.unwrap( client.api.upload.files.direct_many(files: files, request_options: , **) ) response.map do |file_name, uuid| Uploadcare::Resources::File.new({ uuid: uuid, original_filename: decode_uploaded_filename(file_name) }, client) end end |
#upload_from_url(url:, request_options: {}, **options) ⇒ Uploadcare::Resources::File, Hash
Upload a file from URL.
87 88 89 90 91 92 93 94 |
# File 'lib/uploadcare/operations/upload_router.rb', line 87 def upload_from_url(url:, request_options: {}, **) response = Uploadcare::Result.unwrap( client.api.upload.files.from_url(source_url: url, request_options: , **) ) return response if [:async] Uploadcare::Resources::File.new(response, client) end |
#upload_from_url_status(token:, request_options: {}) ⇒ Hash
Get upload-from-URL status.
119 120 121 122 123 |
# File 'lib/uploadcare/operations/upload_router.rb', line 119 def upload_from_url_status(token:, request_options: {}) Uploadcare::Result.unwrap( client.api.upload.files.from_url_status(token: token, request_options: ) ) end |