Class: Uploadcare::Api::Upload
- Inherits:
-
Object
- Object
- Uploadcare::Api::Upload
- Includes:
- Internal::ErrorHandler, Internal::ThrottleHandler
- Defined in:
- lib/uploadcare/api/upload.rb
Overview
Base client for the Uploadcare Upload API.
Provides HTTP methods for upload endpoints using multipart/form-data encoding. Authentication is handled via public key in request parameters (no HMAC signing).
Endpoint classes are accessed via lazy-loaded accessors: upload = Uploadcare::Api::Upload.new(config: config) upload.files.direct(file: file_obj) upload.groups.create(files: ["uuid1", "uuid2"])
Instance Attribute Summary collapse
- #config ⇒ Uploadcare::Configuration readonly
- #connection ⇒ Faraday::Connection readonly
Instance Method Summary collapse
-
#files ⇒ Uploadcare::Api::Upload::Files
File upload operations.
-
#get(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result
Make a GET request to the Upload API wrapped in a Result.
-
#groups ⇒ Uploadcare::Api::Upload::Groups
Group operations via Upload API.
-
#initialize(config: Uploadcare.configuration) ⇒ Upload
constructor
Initialize a new Upload API client.
-
#post(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result
Make a POST request to the Upload API wrapped in a Result.
-
#upload_part_to_url(presigned_url, part_data, max_retries: 3, timeout: nil, open_timeout: nil) ⇒ Boolean
Upload binary data to a presigned URL (for multipart uploads).
Constructor Details
#initialize(config: Uploadcare.configuration) ⇒ Upload
Initialize a new Upload API client.
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/uploadcare/api/upload.rb', line 36 def initialize(config: Uploadcare.configuration) @config = config @memo_mutex = Mutex.new @connection = Faraday.new(url: config.upload_api_root) do |conn| conn.request :multipart conn.request :url_encoded conn.response :json, content_type: /\bjson$/ conn.response :raise_error conn.response :logger, config.logger, bodies: false, headers: false if ENV['DEBUG'] conn.adapter Faraday.default_adapter end end |
Instance Attribute Details
#config ⇒ Uploadcare::Configuration (readonly)
28 29 30 |
# File 'lib/uploadcare/api/upload.rb', line 28 def config @config end |
#connection ⇒ Faraday::Connection (readonly)
31 32 33 |
# File 'lib/uploadcare/api/upload.rb', line 31 def connection @connection end |
Instance Method Details
#files ⇒ Uploadcare::Api::Upload::Files
Returns File upload operations.
52 53 54 |
# File 'lib/uploadcare/api/upload.rb', line 52 def files memoized(:@files) { Uploadcare::Api::Upload::Files.new(upload: self) } end |
#get(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result
Make a GET request to the Upload API wrapped in a Result.
70 71 72 73 74 |
# File 'lib/uploadcare/api/upload.rb', line 70 def get(path:, params: {}, headers: {}, request_options: {}) Uploadcare::Result.capture do make_request(:get, path, params, headers, ) end end |
#groups ⇒ Uploadcare::Api::Upload::Groups
Returns Group operations via Upload API.
57 58 59 |
# File 'lib/uploadcare/api/upload.rb', line 57 def groups memoized(:@groups) { Uploadcare::Api::Upload::Groups.new(upload: self) } end |
#post(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result
Make a POST request to the Upload API wrapped in a Result.
83 84 85 86 87 |
# File 'lib/uploadcare/api/upload.rb', line 83 def post(path:, params: {}, headers: {}, request_options: {}) Uploadcare::Result.capture do make_request(:post, path, params, headers, ) end end |
#upload_part_to_url(presigned_url, part_data, max_retries: 3, timeout: nil, open_timeout: nil) ⇒ Boolean
Upload binary data to a presigned URL (for multipart uploads).
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/uploadcare/api/upload.rb', line 98 def upload_part_to_url(presigned_url, part_data, max_retries: 3, timeout: nil, open_timeout: nil) uri = validated_presigned_uri(presigned_url) retries = 0 begin conn = Faraday.new(url: "#{uri.scheme}://#{uri.host}") do |f| f.adapter Faraday.default_adapter end data = part_data.respond_to?(:read) ? part_data.read : part_data response = upload_part_request( conn: conn, request_uri: uri.request_uri, data: data, timeout: timeout, open_timeout: open_timeout ) raise_multipart_upload_error("Failed to upload part: HTTP #{response.status}") unless success_response?(response) true rescue StandardError => e retry_part_upload_or_raise!(error: e, retries: retries, max_retries: max_retries) retries += 1 retry end end |