Ruby API Client

Ruby integration handles uploads and file operations by wrapping Uploadcare Upload API and REST API. This comprehensive API client lets you use most of the Uploadcare features from within your Ruby app.

Gem →

GitHub →

Features

Uploading (Upload API):

  • Upload files from local storage and URLs (up to 5 TB)
  • Multipart uploading for large files
  • Uploading network to speed uploading jobs (like CDN)

File management (REST API):

  • Get file info and perform various operations (store/delete/copy) with them
  • Work with groups of files
  • Get info about account project
  • Manage webhooks
  • Convert documents
  • Encode and transform videos

Image processing (URL API):

  • Compression
  • Geometry
  • Colors
  • Definition
  • Image and text overlays
  • Rotations
  • Recognition
  • File info
  • Proxy (fetch)

Security features:

  • Secure authentication
  • Secure uploads (signed uploads)
  • Secure delivery (signed URLs)
  • Secure webhooks (signing secret)

Requirements

  • Ruby 2.7+

Note that uploadcare-ruby 3.x is not backward compatible with 2.x.

Install

Add this line to your application's Gemfile:

gem 'uploadcare-ruby'

And then execute:

bundle

If you use api_struct gem in your project, replace it with uploadcare-api_struct:

gem 'uploadcare-api_struct'

and run bundle install.

If already not, create your project in Uploadcare dashboard and copy your API keys from there.

Set your Uploadcare keys in config file or through environment variables:

export UPLOADCARE_PUBLIC_KEY=$YOUR_PUBLIC_KEY
export UPLOADCARE_SECRET_KEY=$YOUR_SECRET_KEY

Or configure your app yourself if you are using different way of storing keys. Gem configuration is available in Uploadcare.configuration. Full list of settings can be seen in lib/uploadcare.rb

# your_config_initializer_file.rb
Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

Usage example

This section contains practical usage examples. Please note, everything that follows gets way more clear once you've looked through our docs.

Uploading and storing a single file

Using Uploadcare is simple, and here are the basics of handling files.

@file_to_upload = File.open("your-file.png")

@uc_file = Uploadcare::Uploader.upload(@file_to_upload)

@uc_file.uuid
# => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"

# URL for the file, can be used with your website or app right away
@uc_file.cdn_url
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"

Your might then want to store or delete the uploaded file. Storing files could be crucial if you aren't using the “Automatic file storing” option for your Uploadcare project. If not stored manually or automatically, files get deleted within a 24-hour period.

# that's how you store a file
@uc_file.store
# => #<Uploadcare::Api::File ...

# and that works for deleting it
@uc_file.delete
# => #<Uploadcare::Api::File ...

Uploads

Uploadcare supports multiple ways to upload files:

# Smart upload - detects type of passed object and picks appropriate upload method
Uploadcare::Uploader.upload('https://placekitten.com/96/139')

There are explicit ways to select upload type:

files = [File.open('1.jpg'), File.open('1.jpg']
Uploadcare::Uploader.upload_files(files)

Uploadcare::Uploader.upload_from_url('https://placekitten.com/96/139')

# multipart upload - can be useful for files bigger than 10 mb
Uploadcare::Uploader.multipart_upload(File.open('big_file.bin'))

Upload options

You can override global :autostore option for each upload request:

@api.upload(files, store: true)
@api.upload_from_url(url, store: :auto)

Api

Most methods are also available through Uploadcare::Api object:

# Same as Uploadcare::Uploader.upload
Uploadcare::Api.upload('https://placekitten.com/96/139')

Entity object

Entities are representations of objects in Uploadcare cloud.

File

File entity contains its metadata.

@file = Uploadcare::File.file('FILE_ID_IN_YOUR_PROJECT')
{"datetime_removed"=>nil,
 "datetime_stored"=>"2020-01-16T15:03:15.315064Z",
 "datetime_uploaded"=>"2020-01-16T15:03:14.676902Z",
 "image_info"=>
  {"color_mode"=>"RGB",
   "orientation"=>nil,
   "format"=>"JPEG",
   "sequence"=>false,
   "height"=>183,
   "width"=>190,
   "geo_location"=>nil,
   "datetime_original"=>nil,
   "dpi"=>nil},
 "is_image"=>true,
 "is_ready"=>true,
 "mime_type"=>"image/jpeg",
 "original_file_url"=>
  "https://ucarecdn.com/FILE_ID_IN_YOUR_PROJECT/imagepng.jpeg",
 "original_filename"=>"image.png.jpeg",
 "size"=>5345,
 "url"=>
  "https://api.uploadcare.com/files/FILE_ID_IN_YOUR_PROJECT/",
 "uuid"=>"8f64f313-e6b1-4731-96c0-6751f1e7a50a"}

@file.copy #copies file, returns a new (copied) file metadata

@file.store #stores file, returns updated metadata

@file.delete #deletes file. Returns updated metadata

Metadata of deleted files is stored permanently.

FileList

Uploadcare::Entity::FileList represents the whole collection of files (or it's subset) and provides a way to iterate through it, making pagination transparent. FileList objects can be created using Uploadcare::Entity.file_list method.

@list = Uploadcare::Entity.file_list
# Returns instance of Uploadcare::Api::FileList
<Hashie::Mash
  next=nil
  per_page=100
  previous=nil
  results=[
    # Array of Entity::File
  ]
  total=8>
# load last page of files
@files = @list.files
# load all files
@all_files = @list.load

Full documentation

Read the full documentation on GitHub.