uploadcare-ruby 2.1.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/gem-push.yml +20 -0
- data/.github/workflows/ruby.yml +52 -0
- data/.gitignore +13 -6
- data/.rspec +2 -0
- data/.rubocop.yml +33 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +29 -47
- data/DEVELOPMENT.md +18 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/README.md +433 -527
- data/Rakefile +5 -5
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/uploadcare/api/api.rb +25 -0
- data/lib/uploadcare/client/conversion/base_conversion_client.rb +59 -0
- data/lib/uploadcare/client/conversion/document_conversion_client.rb +41 -0
- data/lib/uploadcare/client/conversion/video_conversion_client.rb +46 -0
- data/lib/uploadcare/client/file_client.rb +44 -0
- data/lib/uploadcare/client/file_list_client.rb +46 -0
- data/lib/uploadcare/client/group_client.rb +45 -0
- data/lib/uploadcare/client/multipart_upload/chunks_client.rb +57 -0
- data/lib/uploadcare/client/multipart_upload_client.rb +64 -0
- data/lib/uploadcare/client/project_client.rb +18 -0
- data/lib/uploadcare/client/rest_client.rb +74 -0
- data/lib/uploadcare/client/rest_group_client.rb +23 -0
- data/lib/uploadcare/client/upload_client.rb +43 -0
- data/lib/uploadcare/client/uploader_client.rb +101 -0
- data/lib/uploadcare/client/webhook_client.rb +47 -0
- data/lib/uploadcare/concern/error_handler.rb +54 -0
- data/lib/uploadcare/concern/throttle_handler.rb +25 -0
- data/lib/uploadcare/concern/upload_error_handler.rb +32 -0
- data/lib/uploadcare/entity/conversion/base_converter.rb +36 -0
- data/lib/uploadcare/entity/conversion/document_converter.rb +15 -0
- data/lib/uploadcare/entity/conversion/video_converter.rb +15 -0
- data/lib/uploadcare/entity/decorator/paginator.rb +79 -0
- data/lib/uploadcare/entity/entity.rb +18 -0
- data/lib/uploadcare/entity/file.rb +106 -0
- data/lib/uploadcare/entity/file_list.rb +31 -0
- data/lib/uploadcare/entity/group.rb +40 -0
- data/lib/uploadcare/entity/group_list.rb +24 -0
- data/lib/uploadcare/entity/project.rb +13 -0
- data/lib/uploadcare/entity/uploader.rb +81 -0
- data/lib/uploadcare/entity/webhook.rb +14 -0
- data/lib/uploadcare/exception/conversion_error.rb +8 -0
- data/lib/uploadcare/exception/request_error.rb +9 -0
- data/lib/uploadcare/exception/throttle_error.rb +16 -0
- data/lib/uploadcare/param/authentication_header.rb +25 -0
- data/lib/uploadcare/param/conversion/document/processing_job_url_builder.rb +39 -0
- data/lib/uploadcare/param/conversion/video/processing_job_url_builder.rb +64 -0
- data/lib/uploadcare/param/param.rb +10 -0
- data/lib/uploadcare/param/secure_auth_header.rb +37 -0
- data/lib/uploadcare/param/simple_auth_header.rb +14 -0
- data/lib/uploadcare/param/upload/signature_generator.rb +24 -0
- data/lib/uploadcare/param/upload/upload_params_generator.rb +23 -0
- data/lib/uploadcare/param/user_agent.rb +21 -0
- data/lib/uploadcare/ruby/version.rb +5 -0
- data/lib/uploadcare.rb +36 -32
- data/uploadcare-ruby.gemspec +50 -37
- metadata +107 -113
- data/.travis.yml +0 -26
- data/UPGRADE_NOTES.md +0 -36
- data/lib/uploadcare/api/file_api.rb +0 -7
- data/lib/uploadcare/api/file_list_api.rb +0 -19
- data/lib/uploadcare/api/file_storage_api.rb +0 -34
- data/lib/uploadcare/api/group_api.rb +0 -38
- data/lib/uploadcare/api/group_list_api.rb +0 -17
- data/lib/uploadcare/api/project_api.rb +0 -9
- data/lib/uploadcare/api/raw_api.rb +0 -38
- data/lib/uploadcare/api/uploading_api/upload_params.rb +0 -72
- data/lib/uploadcare/api/uploading_api.rb +0 -71
- data/lib/uploadcare/api/validators/file_list_options_validator.rb +0 -73
- data/lib/uploadcare/api/validators/group_list_options_validator.rb +0 -49
- data/lib/uploadcare/api.rb +0 -26
- data/lib/uploadcare/errors/errors.rb +0 -64
- data/lib/uploadcare/resources/file.rb +0 -164
- data/lib/uploadcare/resources/file_list.rb +0 -14
- data/lib/uploadcare/resources/group.rb +0 -115
- data/lib/uploadcare/resources/group_list.rb +0 -14
- data/lib/uploadcare/resources/project.rb +0 -13
- data/lib/uploadcare/resources/resource_list.rb +0 -83
- data/lib/uploadcare/rest/auth/auth.rb +0 -31
- data/lib/uploadcare/rest/auth/secure.rb +0 -43
- data/lib/uploadcare/rest/auth/simple.rb +0 -16
- data/lib/uploadcare/rest/connections/api_connection.rb +0 -53
- data/lib/uploadcare/rest/connections/upload_connection.rb +0 -22
- data/lib/uploadcare/rest/middlewares/auth_middleware.rb +0 -24
- data/lib/uploadcare/rest/middlewares/parse_json_middleware.rb +0 -33
- data/lib/uploadcare/rest/middlewares/raise_error_middleware.rb +0 -21
- data/lib/uploadcare/utils/parser.rb +0 -71
- data/lib/uploadcare/utils/user_agent.rb +0 -44
- data/lib/uploadcare/version.rb +0 -3
- data/spec/api/file_list_api_spec.rb +0 -95
- data/spec/api/file_storage_api_spec.rb +0 -88
- data/spec/api/group_list_api_spec.rb +0 -59
- data/spec/api/raw_api_spec.rb +0 -25
- data/spec/api/uploading_api/upload_params_spec.rb +0 -99
- data/spec/api/uploading_api_spec.rb +0 -59
- data/spec/resources/file_list_spec.rb +0 -25
- data/spec/resources/file_spec.rb +0 -223
- data/spec/resources/group_list_spec.rb +0 -25
- data/spec/resources/group_spec.rb +0 -101
- data/spec/resources/operations_spec.rb +0 -59
- data/spec/resources/project_spec.rb +0 -21
- data/spec/rest/api_connection_spec.rb +0 -68
- data/spec/rest/auth/secure_spec.rb +0 -66
- data/spec/rest/auth/simple_spec.rb +0 -31
- data/spec/rest/errors_spec.rb +0 -75
- data/spec/rest/upload_connection_spec.rb +0 -19
- data/spec/shared/resource_list.rb +0 -188
- data/spec/spec_helper.rb +0 -54
- data/spec/uploadcare_spec.rb +0 -43
- data/spec/utils/parser_spec.rb +0 -85
- data/spec/utils/user_agent_spec.rb +0 -46
- data/spec/view.png +0 -0
- data/spec/view2.jpg +0 -0
data/README.md
CHANGED
|
@@ -1,117 +1,92 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# Ruby integration for Uploadcare
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
[![Build Status][actions-img]][actions-badge]
|
|
3
5
|
[![Uploadcare stack on StackShare][stack-img]][stack]
|
|
6
|
+
<!--[![Coverage Status][coverals-img]][coverals]-->
|
|
4
7
|
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[coverals-img]: https://coveralls.io/repos/github/uploadcare/uploadcare-ruby/badge.svg?branch=
|
|
8
|
-
[coverals]: https://coveralls.io/github/uploadcare/uploadcare-ruby?branch=
|
|
8
|
+
[actions-badge]: https://github.com/uploadcare/uploadcare-ruby/actions/workflows/ruby.yml
|
|
9
|
+
[actions-img]: https://github.com/uploadcare/uploadcare-ruby/actions/workflows/ruby.yml/badge.svg
|
|
10
|
+
[coverals-img]: https://coveralls.io/repos/github/uploadcare/uploadcare-ruby/badge.svg?branch=main
|
|
11
|
+
[coverals]: https://coveralls.io/github/uploadcare/uploadcare-ruby?branch=main
|
|
9
12
|
[stack-img]: https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat
|
|
10
13
|
[stack]: https://stackshare.io/uploadcare/stacks/
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
Uploadcare Ruby integration handles uploads and further operations with files by
|
|
16
|
+
wrapping Upload and REST APIs.
|
|
17
|
+
|
|
18
|
+
* [Installation](#installation)
|
|
19
|
+
* [Usage](#usage)
|
|
20
|
+
* [Uploading files](#uploading-files)
|
|
21
|
+
* [Uploading and storing a single file](#uploading-and-storing-a-single-file)
|
|
22
|
+
* [Multiple ways to upload files](#multiple-ways-to-upload-files)
|
|
23
|
+
* [Uploading options](#uploading-options)
|
|
24
|
+
* [File management](#file-management)
|
|
25
|
+
* [File](#file)
|
|
26
|
+
* [FileList](#filelist)
|
|
27
|
+
* [Pagination](#pagination)
|
|
28
|
+
* [Group](#group)
|
|
29
|
+
* [GroupList](#grouplist)
|
|
30
|
+
* [Webhook](#webhook)
|
|
31
|
+
* [Project](#project)
|
|
32
|
+
* [Conversion](#conversion)
|
|
33
|
+
* [Useful links](#useful-links)
|
|
34
|
+
|
|
35
|
+
## Requirements
|
|
36
|
+
* ruby 2.4+
|
|
37
|
+
|
|
38
|
+
## Compatibility
|
|
39
|
+
|
|
40
|
+
Note that `uploadcare-ruby` **3.x** is not backward compatible with
|
|
41
|
+
**[2.x](https://github.com/uploadcare/uploadcare-ruby/tree/v2.x)**.
|
|
13
42
|
|
|
14
43
|
## Installation
|
|
15
44
|
|
|
16
|
-
|
|
17
|
-
First of, add the following line to your app's Gemfile:
|
|
45
|
+
Add this line to your application's Gemfile:
|
|
18
46
|
|
|
19
47
|
```ruby
|
|
20
|
-
gem
|
|
48
|
+
gem "uploadcare-ruby"
|
|
21
49
|
```
|
|
22
50
|
|
|
23
|
-
|
|
51
|
+
And then execute:
|
|
24
52
|
|
|
25
|
-
|
|
26
|
-
$ bundle install
|
|
27
|
-
```
|
|
53
|
+
$ bundle
|
|
28
54
|
|
|
29
|
-
|
|
55
|
+
If already not, create your project in [Uploadcare dashboard](https://uploadcare.com/dashboard/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby) and copy
|
|
56
|
+
its API keys from there.
|
|
30
57
|
|
|
31
|
-
|
|
32
|
-
|
|
58
|
+
Set your Uploadcare keys in config file or through environment variables:
|
|
59
|
+
```bash
|
|
60
|
+
export UPLOADCARE_PUBLIC_KEY=demopublickey
|
|
61
|
+
export UPLOADCARE_SECRET_KEY=demoprivatekey
|
|
33
62
|
```
|
|
34
63
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
64
|
+
Or configure your app yourself if you are using different way of storing keys.
|
|
65
|
+
Gem configuration is available in `Uploadcare.configuration`. Full list of
|
|
66
|
+
settings can be seen in [`lib/uploadcare.rb`](lib/uploadcare.rb)
|
|
38
67
|
|
|
39
68
|
```ruby
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@api = Uploadcare::Api.new(settings) # using user-defined settings
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Here's how the default settings look like:
|
|
48
|
-
|
|
49
|
-
``` ruby
|
|
50
|
-
{
|
|
51
|
-
public_key: 'demopublickey', # you need to override this
|
|
52
|
-
private_key: 'demoprivatekey', # you need to override this
|
|
53
|
-
upload_url_base: 'https://upload.uploadcare.com',
|
|
54
|
-
api_url_base: 'https://api.uploadcare.com',
|
|
55
|
-
static_url_base: 'https://ucarecdn.com',
|
|
56
|
-
api_version: '0.5',
|
|
57
|
-
cache_files: true,
|
|
58
|
-
autostore: :auto,
|
|
59
|
-
auth_scheme: :secure
|
|
60
|
-
}
|
|
69
|
+
# your_config_initializer_file.rb
|
|
70
|
+
Uploadcare.config.public_key = "demopublickey"
|
|
71
|
+
Uploadcare.config.secret_key = "demoprivatekey"
|
|
61
72
|
```
|
|
62
73
|
|
|
63
|
-
You're free to use both `demopublickey` and `demoprivatekey`
|
|
64
|
-
for initial testing purposes. We wipe out files loaded to our
|
|
65
|
-
demo account periodically. For a better experience,
|
|
66
|
-
consider creating an Uploadcare account. Check out
|
|
67
|
-
[this](http://kb.uploadcare.com/article/234-uc-project-and-account)
|
|
68
|
-
article to get up an running in minutes.
|
|
69
|
-
|
|
70
|
-
Please note, in order to use [Upload API](https://uploadcare.com/documentation/upload/)
|
|
71
|
-
you will only need the public key alone. However, using
|
|
72
|
-
[REST API](https://uploadcare.com/documentation/rest/) requires you to
|
|
73
|
-
use both public and private keys for authentication.
|
|
74
|
-
While “private key” is a common way to name a key from an
|
|
75
|
-
authentication key pair, the actual thing for our `auth-param` is `secret_key`.
|
|
76
|
-
|
|
77
|
-
`:autostore` option allows you to set the default storage
|
|
78
|
-
behaviour upon uploads. For more info see [`store` flag][uploads from url] for
|
|
79
|
-
uploads via URL and [`UPLOADCARE_STORE` flag][in-body file uploads] for file uploads
|
|
80
|
-
|
|
81
|
-
[in-body file uploads]: https://uploadcare.com/documentation/upload/#upload-body
|
|
82
|
-
[uploads from url]: https://uploadcare.com/documentation/upload/#from-url
|
|
83
|
-
|
|
84
74
|
## Usage
|
|
85
75
|
|
|
86
|
-
This section contains practical usage examples. Please note,
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
This section contains practical usage examples. Please note, everything that
|
|
77
|
+
follows gets way more clear once you've looked through our
|
|
78
|
+
[docs](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby).
|
|
89
79
|
|
|
90
|
-
###
|
|
80
|
+
### Uploading files
|
|
81
|
+
#### Uploading and storing a single file
|
|
91
82
|
|
|
92
83
|
Using Uploadcare is simple, and here are the basics of handling files.
|
|
93
84
|
|
|
94
|
-
First of, create the API object:
|
|
95
|
-
|
|
96
|
-
```ruby
|
|
97
|
-
@api = Uploadcare::Api.new(CONFIG)
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
And yeah, now you can upload a file:
|
|
102
|
-
|
|
103
85
|
```ruby
|
|
104
86
|
@file_to_upload = File.open("your-file.png")
|
|
105
87
|
|
|
106
|
-
@uc_file =
|
|
107
|
-
# => #<Uploadcare::Api::File ...
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Then, let's check out UUID and URL of the
|
|
111
|
-
file you've just uploaded:
|
|
88
|
+
@uc_file = Uploadcare::Uploader.upload(@file_to_upload)
|
|
112
89
|
|
|
113
|
-
```ruby
|
|
114
|
-
# file uuid (you'd probably want to store those somewhere)
|
|
115
90
|
@uc_file.uuid
|
|
116
91
|
# => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
117
92
|
|
|
@@ -120,10 +95,9 @@ file you've just uploaded:
|
|
|
120
95
|
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"
|
|
121
96
|
```
|
|
122
97
|
|
|
123
|
-
Your might then want to store or delete the uploaded file.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
If not stored manually or automatically, files get deleted
|
|
98
|
+
Your might then want to store or delete the uploaded file. Storing files could
|
|
99
|
+
be crucial if you aren't using the “Automatic file storing” option for your
|
|
100
|
+
Uploadcare project. If not stored manually or automatically, files get deleted
|
|
127
101
|
within a 24-hour period.
|
|
128
102
|
|
|
129
103
|
```ruby
|
|
@@ -136,588 +110,520 @@ within a 24-hour period.
|
|
|
136
110
|
# => #<Uploadcare::Api::File ...
|
|
137
111
|
```
|
|
138
112
|
|
|
139
|
-
|
|
113
|
+
#### Multiple ways to upload files
|
|
140
114
|
|
|
141
|
-
|
|
142
|
-
and you're good to go.
|
|
115
|
+
Uploadcare supports multiple ways to upload files:
|
|
143
116
|
|
|
144
117
|
```ruby
|
|
145
|
-
#
|
|
146
|
-
|
|
147
|
-
# => #<Uploadcare::Api::File ...
|
|
148
|
-
|
|
149
|
-
# use this one if you want to explicitly upload from URL
|
|
150
|
-
@file = @api.upload_from_url "http://your.awesome/avatar.jpg"
|
|
151
|
-
# => #<Uploadcare::Api::File ...
|
|
118
|
+
# Smart upload - detects type of passed object and picks appropriate upload method
|
|
119
|
+
Uploadcare::Uploader.upload("https://placekitten.com/96/139")
|
|
152
120
|
```
|
|
153
|
-
Keep in mind that providing invalid URL
|
|
154
|
-
will raise `ArgumentError`.
|
|
155
121
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
Uploading multiple files is as simple as passing an array
|
|
159
|
-
of `File` instances into our API.
|
|
122
|
+
There are explicit ways to select upload type:
|
|
160
123
|
|
|
161
124
|
```ruby
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
files = [file1, file2]
|
|
125
|
+
files = [File.open("1.jpg"), File.open("1.jpg"]
|
|
126
|
+
Uploadcare::Uploader.upload_files(files)
|
|
165
127
|
|
|
166
|
-
|
|
167
|
-
# => [#<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40">,
|
|
168
|
-
# #<Uploadcare::Api::File uuid="96cdc400-adc3-435b-9c94-04cd87633fbb">]
|
|
128
|
+
Uploadcare::Uploader.upload_from_url("https://placekitten.com/96/139")
|
|
169
129
|
```
|
|
170
|
-
|
|
171
|
-
In case of multiple input, the respective output would also be an array.
|
|
172
|
-
You can iterate through the array to address to single files.
|
|
173
|
-
You might also want to request more info about a file using `load_data`.
|
|
130
|
+
It is possible to track progress of the upload-from-URL process. To do that, you should specify the `async` option and get a token:
|
|
174
131
|
|
|
175
132
|
```ruby
|
|
176
|
-
|
|
177
|
-
# =>
|
|
178
|
-
|
|
179
|
-
@uc_files[1].load_data
|
|
180
|
-
# => #<Uploadcare::Api::File uuid="96cdc400-adc3-435b-9c94-04cd87633fbb", original_file_url="https://ucarecdn.com/96cdc400-adc3-435b-9c94-04cd87633fbb/samuelzeller118195.jpg", image_info={"width"=>4896, "geo_location"=>nil, "datetime_original"=>nil, "height"=>3264}, ....>
|
|
133
|
+
Uploadcare::Uploader.upload_from_url("https://placekitten.com/96/139", async: true)
|
|
134
|
+
# => "c6e31082-6bdc-4cb3-bef5-14dd10574d72"
|
|
181
135
|
```
|
|
182
136
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
You can override global [`:autostore`](#initialization) option for each upload request:
|
|
137
|
+
After the request for uploading-from-URL is sent, you can check the progress of the upload by sending the `get_upload_from_url_status` request:
|
|
186
138
|
|
|
187
139
|
```ruby
|
|
188
|
-
|
|
189
|
-
|
|
140
|
+
Uploadcare::Uploader.get_upload_from_url_status("1251ee66-3631-4416-a2fb-96ba59f5a515")
|
|
141
|
+
# => Success({:size=>28511, :total=>28511, :done=>28511, :uuid=>"b829753b-6b64-4989-a167-ef15e4f3d190", :file_id=>"b859753b-zb64-4989-a167-ef15e4f3a190", :original_filename=>"video.ogg", :is_image=>false, :is_stored=>false, :image_info=>nil, :video_info=>nil, :is_ready=>true, :filename=>"video.ogg", :mime_type=>"audio/ogg", :status=>"success"})
|
|
190
142
|
```
|
|
191
143
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Now that we've already outlined using arrays of `File` instances
|
|
195
|
-
to upload multiple files, let's fix on the `File` itself.
|
|
196
|
-
It's the the primary object for Uploadcare API.
|
|
197
|
-
Basically, it's an avatar for a file you uploaded.
|
|
198
|
-
And all the further operations are performed using this avatar,
|
|
199
|
-
the `File` object.
|
|
144
|
+
In case of the `async` option is disabled, uploadcare-ruby tries to request the upload status several times (depending on the `max_request_tries` config param) and then returns uploaded file attributes.
|
|
200
145
|
|
|
201
146
|
```ruby
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
@uc_file = @api.upload(@file_to_upload)
|
|
205
|
-
# => #<Uploadcare::Api::File ...
|
|
206
|
-
|
|
207
|
-
@uc_file.uuid
|
|
208
|
-
# => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
209
|
-
|
|
210
|
-
@uc_file.cdn_url
|
|
211
|
-
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
Please note, all the data associated with files is only accessible
|
|
215
|
-
through separate HTTP requests only. So if you don't specifically
|
|
216
|
-
need file data (filenames, image dimensions, etc.), you'll be just
|
|
217
|
-
fine with using `:uuid` and `:cdn_url` methods for file output:
|
|
218
|
-
|
|
219
|
-
```erb
|
|
220
|
-
<img src="#{@file.cdn_url}"/>
|
|
147
|
+
# multipart upload - can be useful for files bigger than 10 mb
|
|
148
|
+
Uploadcare::Uploader.multipart_upload(File.open("big_file.bin"), store: true)
|
|
221
149
|
```
|
|
222
150
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
it manually:
|
|
151
|
+
For the multipart upload you can pass a block to add some additional logic after each file chunk is uploaded.
|
|
152
|
+
For example to track file uploading progress you can do something like this:
|
|
226
153
|
|
|
227
154
|
```ruby
|
|
228
|
-
|
|
155
|
+
file = File.open("big_file.bin")
|
|
156
|
+
progress = 0
|
|
157
|
+
Uploadcare::Uploader.multipart_upload(file, store: true) do |options|
|
|
158
|
+
progress += (100.0 / options[:links_count])
|
|
159
|
+
puts "PROGRESS = #{progress}"
|
|
160
|
+
end
|
|
229
161
|
```
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
@uc_file.original_filename
|
|
237
|
-
# => "logo.png"
|
|
238
|
-
|
|
239
|
-
@uc_file.image_info
|
|
240
|
-
# => {"width"=>397, "geo_location"=>nil, "datetime_original"=>nil, "height"=>81}
|
|
162
|
+
Output of the code above looks like:
|
|
163
|
+
```console
|
|
164
|
+
PROGRESS = 4.545454545454546
|
|
165
|
+
PROGRESS = 9.090909090909092
|
|
166
|
+
PROGRESS = 13.636363636363637
|
|
167
|
+
...
|
|
241
168
|
```
|
|
169
|
+
Options available in a block:
|
|
170
|
+
- **:chunk_size** - size of each chunk in bytes;
|
|
171
|
+
- **:object** - file object which is going to be uploaded;
|
|
172
|
+
- **:offset** - offset from the beginning of a File object in bytes;
|
|
173
|
+
- **:link_id** - index of a link provided by Uploadcare API. Might be treated as index of a chunk;
|
|
174
|
+
- **:links** - array of links for uploading file's chunks;
|
|
175
|
+
- **:links_count** - count of the array of links.
|
|
242
176
|
|
|
243
|
-
|
|
177
|
+
#### Uploading options
|
|
244
178
|
|
|
245
|
-
|
|
246
|
-
The usual case would be you as a client storing file UUIDs
|
|
247
|
-
or CDN URLs somewhere on your side, e.g. in a database.
|
|
248
|
-
This is how you can use those to create `File` objects:
|
|
179
|
+
You can override global [`:autostore`](#initialization) option for each upload request:
|
|
249
180
|
|
|
250
181
|
```ruby
|
|
251
|
-
|
|
252
|
-
@
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
# file object from CDN URL
|
|
256
|
-
@file = @api.file "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/"
|
|
257
|
-
# => #<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
182
|
+
@api.upload(files, store: true)
|
|
183
|
+
@api.upload_from_url(url, store: :auto)
|
|
184
|
+
```
|
|
258
185
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
#
|
|
186
|
+
### File management
|
|
187
|
+
Most methods are also available through `Uploadcare::Api` object:
|
|
188
|
+
```ruby
|
|
189
|
+
# Same as Uploadcare::Uploader.upload
|
|
190
|
+
Uploadcare::Api.upload("https://placekitten.com/96/139")
|
|
263
191
|
```
|
|
264
192
|
|
|
265
|
-
|
|
193
|
+
Entities are representations of objects in Uploadcare cloud.
|
|
266
194
|
|
|
267
|
-
|
|
268
|
-
This is particularly useful for images.
|
|
269
|
-
We've got on-the-fly crop, resize, rotation, format conversions, and
|
|
270
|
-
[more](https://uploadcare.com/documentation/cdn/).
|
|
271
|
-
Image operations are there to help you build responsive designs,
|
|
272
|
-
generate thumbnails and galleries, change formats, etc.
|
|
273
|
-
Currently, this gem has no specific methods for image operations,
|
|
274
|
-
we're planning to implement those in further versions.
|
|
275
|
-
However, we do support applying image operations through
|
|
276
|
-
adding them to CDN URLs. That's an Uploadcare CDN-native
|
|
277
|
-
way described in our [docs](https://uploadcare.com/documentation/cdn/).
|
|
195
|
+
#### File
|
|
278
196
|
|
|
279
|
-
|
|
280
|
-
@file = @api.file "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/-/crop/150x150/center/-/format/png/"
|
|
281
|
-
# => #<Uploadcare::Api::File uuid="dc99200d-9bd6-4b43-bfa9-aa7bfaefca40"
|
|
197
|
+
File entity contains its metadata.
|
|
282
198
|
|
|
283
|
-
|
|
284
|
-
|
|
199
|
+
```ruby
|
|
200
|
+
@file = Uploadcare::File.file("FILE_ID_IN_YOUR_PROJECT")
|
|
201
|
+
{"datetime_removed"=>nil,
|
|
202
|
+
"datetime_stored"=>"2020-01-16T15:03:15.315064Z",
|
|
203
|
+
"datetime_uploaded"=>"2020-01-16T15:03:14.676902Z",
|
|
204
|
+
"image_info"=>
|
|
205
|
+
{"color_mode"=>"RGB",
|
|
206
|
+
"orientation"=>nil,
|
|
207
|
+
"format"=>"JPEG",
|
|
208
|
+
"sequence"=>false,
|
|
209
|
+
"height"=>183,
|
|
210
|
+
"width"=>190,
|
|
211
|
+
"geo_location"=>nil,
|
|
212
|
+
"datetime_original"=>nil,
|
|
213
|
+
"dpi"=>nil},
|
|
214
|
+
"is_image"=>true,
|
|
215
|
+
"is_ready"=>true,
|
|
216
|
+
"mime_type"=>"image/jpeg",
|
|
217
|
+
"original_file_url"=>
|
|
218
|
+
"https://ucarecdn.com/FILE_ID_IN_YOUR_PROJECT/imagepng.jpeg",
|
|
219
|
+
"original_filename"=>"image.png.jpeg",
|
|
220
|
+
"size"=>5345,
|
|
221
|
+
"url"=>
|
|
222
|
+
"https://api.uploadcare.com/files/FILE_ID_IN_YOUR_PROJECT/",
|
|
223
|
+
"uuid"=>"8f64f313-e6b1-4731-96c0-6751f1e7a50a"}
|
|
285
224
|
|
|
286
|
-
#
|
|
287
|
-
@file.cdn_url
|
|
288
|
-
# => "https://ucarecdn.com/dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/""
|
|
225
|
+
@file.copy # copies file, returns a new (copied) file metadata
|
|
289
226
|
|
|
290
|
-
#
|
|
291
|
-
@file.cdn_url(true)
|
|
292
|
-
# => "https://ucarecdn.com/a8775cf7-0c2c-44fa-b071-4dd48637ecac/-/crop/150x150/center/-/format/png/"
|
|
227
|
+
@file.store # stores file, returns updated metadata
|
|
293
228
|
|
|
294
|
-
#
|
|
295
|
-
# in the output URL:
|
|
296
|
-
@file.cdn_url_with_operations
|
|
297
|
-
@file.cdn_url_without_operations
|
|
229
|
+
@file.delete #deletes file. Returns updated metadata
|
|
298
230
|
```
|
|
299
231
|
|
|
300
|
-
|
|
301
|
-
is through adding them to URLs as strings:
|
|
232
|
+
The File object is also can be converted if it is a document or a video file. Imagine, you have a document file:
|
|
302
233
|
|
|
303
234
|
```ruby
|
|
304
|
-
|
|
305
|
-
# or something like that
|
|
235
|
+
@file = Uploadcare::File.file("FILE_ID_IN_YOUR_PROJECT")
|
|
306
236
|
```
|
|
307
237
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
You can also create file copies using our API.
|
|
311
|
-
There are multiple ways of creating those.
|
|
312
|
-
Also, copying is important for image files because
|
|
313
|
-
it allows you to “apply” all the CDN operations
|
|
314
|
-
specified in the source URL to a separate static image.
|
|
315
|
-
|
|
316
|
-
First of all, a copy of your file can be put in the Uploadcare storage.
|
|
317
|
-
This is called “internal copy”, and here's how it works:
|
|
238
|
+
To convert it to an another file, just do:
|
|
318
239
|
|
|
319
240
|
```ruby
|
|
320
|
-
@
|
|
321
|
-
|
|
322
|
-
#
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
"original_file_url"=>"https://ucarecdn.com/a191a3df-2c43-4939-9590-784aa371ad6d/19xldj.jpg",
|
|
328
|
-
"image_info"=>nil,
|
|
329
|
-
"datetime_stored"=>nil,
|
|
330
|
-
"mime_type"=>"application/octet-stream",
|
|
331
|
-
"is_ready"=>true,
|
|
332
|
-
"url"=>"https://api.uploadcare.com/files/a191a3df-2c43-4939-9590-784aa371ad6d/",
|
|
333
|
-
"original_filename"=>"19xldj.jpg",
|
|
334
|
-
"datetime_uploaded"=>"2017-02-10T14:14:18.690581Z",
|
|
335
|
-
"size"=>0,
|
|
336
|
-
"is_image"=>nil,
|
|
337
|
-
"datetime_removed"=>nil,
|
|
338
|
-
"source"=>"/4ea293d5-153f-422f-a24e-350237109606/"
|
|
339
|
-
}
|
|
340
|
-
}
|
|
241
|
+
@converted_file = @file.convert_document({ format: "png", page: "1" }, store: true)
|
|
242
|
+
# => {
|
|
243
|
+
# "uuid"=>"<NEW_FILE_UUID>"}
|
|
244
|
+
# ...other file info...
|
|
245
|
+
# }
|
|
246
|
+
# OR
|
|
247
|
+
# Failure({:"<FILE_UUID>/document/-/format/png/-/page/1/"=>"the target_format is not a supported 'to' format for this source file. <you_source_file_extension> -> png"})
|
|
341
248
|
```
|
|
342
249
|
|
|
343
|
-
|
|
344
|
-
with its own UUID and attributes.
|
|
345
|
-
|
|
346
|
-
`#internal_copy` can optionally be used with the options hash argument.
|
|
347
|
-
The available options are:
|
|
348
|
-
|
|
349
|
-
- *store*
|
|
350
|
-
|
|
351
|
-
By default a copy is created without “storing”.
|
|
352
|
-
Which means it will be deleted within a 24-hour period.
|
|
353
|
-
You can make your output copy permanent by passing the
|
|
354
|
-
`store: true` option to the `#internal_copy` method.
|
|
355
|
-
|
|
356
|
-
Example:
|
|
357
|
-
|
|
358
|
-
```ruby
|
|
359
|
-
@uc_file.internal_copy(store: true)
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
- *strip_operations*
|
|
363
|
-
|
|
364
|
-
If your file is an image and you applied some operations to it,
|
|
365
|
-
then by default the same set of operations is also applied to a copy.
|
|
366
|
-
You can override this by passing `strip_operations: true` to the
|
|
367
|
-
`#internal_copy` method.
|
|
368
|
-
|
|
369
|
-
Example:
|
|
370
|
-
|
|
371
|
-
```ruby
|
|
372
|
-
file = @api.file "https://ucarecdn.com/24626d2f-3f23-4464-b190-37115ce7742a/-/resize/50x50/"
|
|
373
|
-
file.internal_copy
|
|
374
|
-
# => This will trigger POST /files/ with {"source": "https://ucarecdn.com/24626d2f-3f23-4464-b190-37115ce7742a/-/resize/50x50/"} in the body
|
|
375
|
-
file.internal_copy(strip_operations: true)
|
|
376
|
-
# => This will trigger POST /files/ with {"source": "https://ucarecdn.com/24626d2f-3f23-4464-b190-37115ce7742a/"} in the body
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
Another option is copying your file to a custom storage.
|
|
380
|
-
We call it “external copy” and here's the usage example:
|
|
250
|
+
Same works for video files:
|
|
381
251
|
|
|
382
252
|
```ruby
|
|
383
|
-
@
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
}
|
|
253
|
+
@converted_file = @file.convert_video(
|
|
254
|
+
{
|
|
255
|
+
format: "ogg",
|
|
256
|
+
quality: "best",
|
|
257
|
+
cut: { start_time: "0:0:0.1", length: "end" },
|
|
258
|
+
size: { resize_mode: "change_ratio", width: "600", height: "400" },
|
|
259
|
+
thumb: { N: 1, number: 2 }
|
|
260
|
+
},
|
|
261
|
+
store: true
|
|
262
|
+
)
|
|
263
|
+
# => {
|
|
264
|
+
# "uuid"=>"<NEW_FILE_UUID>"}
|
|
265
|
+
# ...other file info...
|
|
266
|
+
# }
|
|
267
|
+
# OR
|
|
268
|
+
# Failure({:"<FILE_UUID>/video/-/size/600x400/preserve_ratio/-/quality/best/-/format/ogg/-/cut/0:0:0.1/end/-/thumbs~1/2/"=>"CDN Path error: Failed to parse remainder \"/preserve_ratio\" of \"size/600x400/preserve_ratio\""})
|
|
390
269
|
```
|
|
391
270
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
There's also an optional second argument — options hash. The available options are:
|
|
396
|
-
|
|
397
|
-
- *make_public*
|
|
398
|
-
|
|
399
|
-
Make a copy available via public links. Can be either `true` or `false`.
|
|
400
|
-
|
|
401
|
-
- *pattern*
|
|
402
|
-
|
|
403
|
-
Name pattern for a copy. If the parameter is omitted, custom storage pattern is used.
|
|
404
|
-
|
|
405
|
-
- *strip_operations*
|
|
406
|
-
|
|
407
|
-
Same as for `#internal_copy`
|
|
271
|
+
More about file conversion [here](#conversion).
|
|
272
|
+
Metadata of deleted files is stored permanently.
|
|
408
273
|
|
|
409
|
-
|
|
410
|
-
[storage options](https://uploadcare.com/documentation/storages/) or
|
|
411
|
-
[copying files](https://uploadcare.com/documentation/rest/#files-post)
|
|
412
|
-
with Uploadcare.
|
|
274
|
+
#### FileList
|
|
413
275
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
`Uploadcare::Api::FileList` represents the whole collection of files (or it's subset) and privides a way to iterate through it, making pagination transparent. FileList objects can be created using `Uploadcare::Api#file_list` method.
|
|
276
|
+
`Uploadcare::Entity::FileList` represents the whole collection of files (or it's
|
|
277
|
+
subset) and provides a way to iterate through it, making pagination transparent.
|
|
278
|
+
FileList objects can be created using `Uploadcare::Entity.file_list` method.
|
|
418
279
|
|
|
419
280
|
```ruby
|
|
420
|
-
@list =
|
|
281
|
+
@list = Uploadcare::Entity.file_list
|
|
282
|
+
# Returns instance of Uploadcare::Api::FileList
|
|
283
|
+
<Hashie::Mash
|
|
284
|
+
next=nil
|
|
285
|
+
per_page=100
|
|
286
|
+
previous=nil
|
|
287
|
+
results=[
|
|
288
|
+
# Array of Entity::File
|
|
289
|
+
]
|
|
290
|
+
total=8>
|
|
291
|
+
# load last page of files
|
|
292
|
+
@files = @list.files
|
|
293
|
+
# load all files
|
|
294
|
+
@all_files = @list.load
|
|
421
295
|
```
|
|
422
296
|
|
|
423
|
-
This method accepts some options to controll which files should be fetched and
|
|
297
|
+
This method accepts some options to controll which files should be fetched and
|
|
298
|
+
how they should be fetched:
|
|
424
299
|
|
|
425
|
-
- **:limit**
|
|
426
|
-
- **:stored**
|
|
427
|
-
- **:removed**
|
|
428
|
-
- **:ordering**
|
|
429
|
-
- **:from**
|
|
300
|
+
- **:limit** — Controls page size. Accepts values from 1 to 1000, defaults to 100.
|
|
301
|
+
- **:stored** — Can be either `true` or `false`. When true, file list will contain only stored files. When false — only not stored.
|
|
302
|
+
- **:removed** — Can be either `true` or `false`. When true, file list will contain only removed files. When false — all except removed. Defaults to false.
|
|
303
|
+
- **:ordering** — Controls the order of returned files. Available values: `datetime_updated`, `-datetime_updated`, `size`, `-size`. Defaults to `datetime_uploaded`. More info can be found [here](https://uploadcare.com/documentation/rest/#file-files/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby).
|
|
304
|
+
- **:from** — Specifies the starting point for a collection. Resulting collection will contain files from the given value and to the end in a direction set by an **ordering** option. When files are ordered by `datetime_updated` in any direction, accepts either a `DateTime` object or an ISO 8601 string. When files are ordered by size, accepts non-negative integers (size in bytes). More info can be found [here](https://uploadcare.com/documentation/rest/#file-files/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby).
|
|
430
305
|
|
|
431
|
-
Options used to create a file list can be accessed through `#options` method.
|
|
306
|
+
Options used to create a file list can be accessed through `#options` method.
|
|
307
|
+
Note that, once set, they don't affect file fetching process anymore and are
|
|
308
|
+
stored just for your convenience. That is why they are frozen.
|
|
432
309
|
|
|
433
310
|
```ruby
|
|
434
311
|
options = {
|
|
435
312
|
limit: 10,
|
|
436
313
|
stored: true,
|
|
437
|
-
ordering:
|
|
314
|
+
ordering: "-datetime_uploaded",
|
|
438
315
|
from: "2017-01-01T00:00:00",
|
|
439
316
|
}
|
|
440
317
|
@list = @api.file_list(options)
|
|
441
|
-
@list.options # => same as options hash above, but frozen
|
|
442
318
|
```
|
|
443
319
|
|
|
444
|
-
|
|
445
|
-
|
|
320
|
+
To simply get all associated objects:
|
|
446
321
|
```ruby
|
|
447
|
-
@list
|
|
448
|
-
@list.total # => 1977
|
|
449
|
-
@list.meta # => {
|
|
450
|
-
# "next"=> "https://api.uploadcare.com/files/?from=2017-03-09T10%3A30%3A01.877590%2B00%3A00&offset=0",
|
|
451
|
-
# "previous"=>nil,
|
|
452
|
-
# "total"=>1977,
|
|
453
|
-
# "per_page"=>100
|
|
454
|
-
# }
|
|
455
|
-
|
|
456
|
-
# Enumerable interface
|
|
457
|
-
@list.first(5) # => array of 5 x Uploadcare::Api::File
|
|
458
|
-
@list.each{|file| puts file.original_filename}
|
|
459
|
-
@list.map{|file| file.uuid}
|
|
460
|
-
@list.reduce(0){|overall_size, file| overall_size += file.size}
|
|
461
|
-
# ...
|
|
322
|
+
@list.all # => returns Array of Files
|
|
462
323
|
```
|
|
463
324
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
Currently loaded files are available through `FileList#objects`. `FileList#loaded` method returns the number of currently loaded files.
|
|
325
|
+
#### Pagination
|
|
467
326
|
|
|
327
|
+
Initially, `FileList` is a paginated collection. It can be navigated using following methods:
|
|
468
328
|
```ruby
|
|
469
|
-
@
|
|
470
|
-
|
|
471
|
-
@
|
|
472
|
-
|
|
473
|
-
@
|
|
474
|
-
@list.objects[4] # => #<Uploadcare::Api::File ...>
|
|
475
|
-
@list.objects[5] # => nil (since 6th file is not yet loaded)
|
|
476
|
-
|
|
477
|
-
@list[4] # won't load anything, because 5 files are already loaded
|
|
478
|
-
@list[5] # will load the next page
|
|
479
|
-
@list.loaded # => 10
|
|
480
|
-
|
|
481
|
-
# Note that the example below will load all the files left, page by page,
|
|
482
|
-
# and return the count only when they all will be loaded
|
|
483
|
-
@list.count # => 132
|
|
484
|
-
@list.fully_loaded? # => true
|
|
329
|
+
@file_list = Uploadcare::Entity::FileList.file_list
|
|
330
|
+
# Let's assume there are 250 files in cloud. By default, UC loads 100 files. To get next 100 files, do:
|
|
331
|
+
@next_page = @file_list.next_page
|
|
332
|
+
# To get previous page:
|
|
333
|
+
@previous_page = @next_page.previous_page
|
|
485
334
|
```
|
|
486
335
|
|
|
487
|
-
|
|
488
|
-
|
|
336
|
+
Alternatively, it's possible to iterate through full list of groups or files with `each`:
|
|
489
337
|
```ruby
|
|
490
|
-
@list
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
i = 0
|
|
494
|
-
@list.map do |file|
|
|
495
|
-
raise if i >= 19
|
|
496
|
-
i += 1
|
|
497
|
-
file.uuid
|
|
498
|
-
end # => RuntimeError
|
|
499
|
-
|
|
500
|
-
@list.loaded # => 20
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
### Store / delete multiple files at once
|
|
505
|
-
|
|
506
|
-
There are two methods to do so: `Uploadcare::Api#store_files` and
|
|
507
|
-
`Uploadcare::Api#delete_files`. Both of them accept a list of either
|
|
508
|
-
UUIDs or `Uploadcare::Api::File`s:
|
|
509
|
-
|
|
510
|
-
```ruby
|
|
511
|
-
uuids_to_store = ['f5c477e0-22af-469d-859a-712e14e14361', 'ec72c6eb-5ea8-4057-a009-52ffffb27c94']
|
|
512
|
-
@api.store_files(uuids_to_store)
|
|
513
|
-
# => {'status' => 'ok', 'problems' => {}, 'result' => [{...}, {...}]}
|
|
514
|
-
|
|
515
|
-
old_files = @api.file_list(stored: true, ordering: '-datetime_uploaded', from: "2015-01-01T00:00:00")
|
|
516
|
-
old_files.each_slice(100) do |batch|
|
|
517
|
-
response = @api.delete_files(batch)
|
|
518
|
-
# Do something with response if you need to
|
|
338
|
+
@list.each do |file|
|
|
339
|
+
p file.url
|
|
519
340
|
end
|
|
520
341
|
```
|
|
521
342
|
|
|
522
|
-
|
|
523
|
-
`#delete_files` with more than 100 files at once will cause an ArgumentError.
|
|
524
|
-
|
|
525
|
-
For more details see our [documentation on batch file storage/deletion](https://uploadcare.com/documentation/rest/#files-storage)
|
|
343
|
+
#### Group
|
|
526
344
|
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
Groups are structures intended to organize sets of separate files.
|
|
530
|
-
Each group is assigned UUID.
|
|
531
|
-
Note, group UUIDs include a `~#{files_count}` part at the end.
|
|
345
|
+
Groups are structures intended to organize sets of separate files. Each group is
|
|
346
|
+
assigned UUID. Note, group UUIDs include a `~#{files_count}` part at the end.
|
|
532
347
|
That's a requirement of our API.
|
|
533
348
|
|
|
534
349
|
```ruby
|
|
535
|
-
# group can be created from an array of Uploadcare files
|
|
350
|
+
# group can be created from an array of Uploadcare files (UUIDs)
|
|
351
|
+
@file = "134dc30c-093e-4f48-a5b9-966fe9cb1d01"
|
|
352
|
+
@file2 = "134dc30c-093e-4f48-a5b9-966fe9cb1d02"
|
|
536
353
|
@files_ary = [@file, @file2]
|
|
537
|
-
@files =
|
|
538
|
-
@group =
|
|
539
|
-
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
|
540
|
-
|
|
541
|
-
# another way to from a group is via an array of strings holding UUIDs
|
|
542
|
-
@uuids_ary = ["c969be02-9925-4a7e-aa6d-b0730368791c", "c969be02-9925-4a7e-aa6d-b0730368791c"]
|
|
543
|
-
@group = @api.create_group @uuids_ary
|
|
544
|
-
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
|
354
|
+
@files = Uploadcare::Uploader.upload @files_ary
|
|
355
|
+
@group = Uploadcare::Group.create @files
|
|
545
356
|
|
|
546
|
-
#
|
|
547
|
-
|
|
357
|
+
# group can be stored by group ID. It means that all files of a group will be stored on Uploadcare servers permanently
|
|
358
|
+
Uploadcare::Group.store(group.id)
|
|
548
359
|
```
|
|
549
360
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
HTTP GET request. New groups created with the `:create_group` method
|
|
553
|
-
are loaded by default.
|
|
361
|
+
#### GroupList
|
|
362
|
+
`GroupList` is a list of `Group`
|
|
554
363
|
|
|
555
364
|
```ruby
|
|
556
|
-
@
|
|
557
|
-
|
|
558
|
-
@
|
|
559
|
-
# => false
|
|
560
|
-
|
|
561
|
-
@group.load_data
|
|
562
|
-
# => #<Uploadcare::Api::Group uuid="0d192d66-c7a6-4465-b2cd-46716c5e3df3~2", files_count=2 ...
|
|
563
|
-
|
|
564
|
-
# once a group is loaded, you can use any methods described in our API docs
|
|
565
|
-
# the files within a loaded group are loaded by default
|
|
566
|
-
@group.files
|
|
567
|
-
# => [#<Uploadcare::Api::File uuid="24626d2f-3f23-4464-b190-37115ce7742a" ...>,
|
|
568
|
-
# ... #{files_count} of them ...
|
|
569
|
-
# #<Uploadcare::Api::File uuid="7bb9efa4-05c0-4f36-b0ef-11a4221867f6" ...>]
|
|
365
|
+
@group_list = Uploadcare::GroupList.list
|
|
366
|
+
# To get an array of groups:
|
|
367
|
+
@groups = @group_list.all
|
|
570
368
|
```
|
|
571
369
|
|
|
572
|
-
|
|
573
|
-
[groups](https://uploadcare.com/documentation/rest/#group).
|
|
370
|
+
This is a paginated list, so [pagination](#Pagination) methods apply
|
|
574
371
|
|
|
372
|
+
#### Webhook
|
|
373
|
+
https://uploadcare.com/docs/api_reference/rest/webhooks/
|
|
575
374
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
`Uploadcare::Api::GroupList` represents a group collection. It works in a same way as `Uploadcare::Api::FileList` does, but with groups.
|
|
375
|
+
You can use webhooks to provide notifications about your uploads to target urls.
|
|
376
|
+
This gem lets you create and manage webhooks.
|
|
579
377
|
|
|
580
378
|
```ruby
|
|
581
|
-
|
|
582
|
-
|
|
379
|
+
Uploadcare::Webhook.create(target_url: "https://example.com/listen", event: "file.uploaded", is_active: true)
|
|
380
|
+
Uploadcare::Webhook.update(<webhook_id>, target_url: "https://newexample.com/listen/new", event: "file.uploaded", is_active: true)
|
|
381
|
+
Uploadcare::Webhook.delete("https://example.com/listen")
|
|
382
|
+
Uploadcare::Webhook.list
|
|
583
383
|
```
|
|
584
384
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
- **:limit** - Controls page size. Accepts values from 1 to 1000, defaults to 100.
|
|
588
|
-
- **:ordering** - Controls the order of returned files. Available values: `datetime_created`, `-datetime_created`. Defaults to `datetime_created`. More info can be found [here](https://uploadcare.com/documentation/rest/#group-groups)
|
|
589
|
-
- **:from** - Specifies the starting point for a collection. Resulting collection will contain files from the given value and to the end in a direction set by an **ordering** option. Accepts either a `DateTime` object or an ISO 8601 string. More info can be found [here](https://uploadcare.com/documentation/rest/#group-groups)
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
### `Project` object
|
|
385
|
+
#### Project
|
|
593
386
|
|
|
594
|
-
`Project` provides basic info about the connected Uploadcare project.
|
|
595
|
-
|
|
596
|
-
[these](https://uploadcare.com/documentation/rest/#project) will work.
|
|
387
|
+
`Project` provides basic info about the connected Uploadcare project. That
|
|
388
|
+
object is also an Hashie::Mash, so every methods out of
|
|
389
|
+
[these](https://uploadcare.com/documentation/rest/#project/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby) will work.
|
|
597
390
|
|
|
598
391
|
```ruby
|
|
599
|
-
project =
|
|
392
|
+
@project = Uploadcare::Project.project
|
|
600
393
|
# => #<Uploadcare::Api::Project collaborators=[], name="demo", pub_key="demopublickey", autostore_enabled=true>
|
|
601
394
|
|
|
602
|
-
project.name
|
|
395
|
+
@project.name
|
|
603
396
|
# => "demo"
|
|
604
397
|
|
|
605
|
-
|
|
398
|
+
@project.collaborators
|
|
606
399
|
# => []
|
|
607
400
|
# while that one was empty, it usually goes like this:
|
|
608
401
|
# [{"email": collaborator@gmail.com, "name": "Collaborator"}, {"email": collaborator@gmail.com, "name": "Collaborator"}]
|
|
609
402
|
```
|
|
610
403
|
|
|
611
|
-
|
|
404
|
+
#### Conversion
|
|
612
405
|
|
|
613
|
-
|
|
614
|
-
custom requests to Uploadcare REST API.
|
|
615
|
-
It's mainly used when you want a low-level control
|
|
616
|
-
over your app.
|
|
406
|
+
##### Video
|
|
617
407
|
|
|
618
|
-
|
|
619
|
-
# here's how you make any requests
|
|
620
|
-
@api.request :get, "/files/", {page: 2}
|
|
621
|
-
|
|
622
|
-
# and there also are shortcuts for methods
|
|
623
|
-
@api.get '/files', {page: 2}
|
|
624
|
-
|
|
625
|
-
@api.post ...
|
|
408
|
+
Uploadcare can encode video files from all popular formats, adjust their quality, format and dimensions, cut out a video fragment, and generate thumbnails via [REST API](https://uploadcare.com/api-refs/rest-api/v0.6.0/).
|
|
626
409
|
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
@api.delete ...
|
|
410
|
+
After each video file upload you obtain a file identifier in UUID format.
|
|
411
|
+
Then you can use this file identifier to convert your video in multiple ways:
|
|
630
412
|
|
|
413
|
+
```ruby
|
|
414
|
+
Uploadcare::VideoConverter.convert(
|
|
415
|
+
[
|
|
416
|
+
{
|
|
417
|
+
uuid: "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40",
|
|
418
|
+
size: { resize_mode: "change_ratio", width: "600", height: "400" },
|
|
419
|
+
quality: "best",
|
|
420
|
+
format: "ogg",
|
|
421
|
+
cut: { start_time: "0:0:0.0", length: "0:0:1.0" },
|
|
422
|
+
thumbs: { N: 2, number: 1 }
|
|
423
|
+
}
|
|
424
|
+
],
|
|
425
|
+
store: false
|
|
426
|
+
)
|
|
631
427
|
```
|
|
428
|
+
This method accepts options to set properties of an output file:
|
|
632
429
|
|
|
633
|
-
|
|
634
|
-
|
|
430
|
+
- **uuid** — the file UUID-identifier.
|
|
431
|
+
- **size**:
|
|
432
|
+
- **resize_mode** - size operation to apply to a video file. Can be `preserve_ratio (default)`, `change_ratio`, `scale_crop` or `add_padding`.
|
|
433
|
+
- **width** - width for a converted video.
|
|
434
|
+
- **height** - height for a converted video.
|
|
635
435
|
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
something with 4xx or 5xx HTTP status.
|
|
436
|
+
```
|
|
437
|
+
NOTE: you can choose to provide a single dimension (width OR height).
|
|
438
|
+
The value you specify for any of the dimensions should be a non-zero integer divisible by 4
|
|
439
|
+
```
|
|
641
440
|
|
|
642
|
-
|
|
441
|
+
- **quality** - sets the level of video quality that affects file sizes and hence loading times and volumes of generated traffic. Can be `normal (default)`, `better`, `best`, `lighter`, `lightest`.
|
|
442
|
+
- **format** - format for a converted video. Can be `mp4 (default)`, `webm`, `ogg`.
|
|
443
|
+
- **cut**:
|
|
444
|
+
- **start_time** - defines the starting point of a fragment to cut based on your input file timeline.
|
|
445
|
+
- **length** - defines the duration of that fragment.
|
|
446
|
+
- **thumbs**:
|
|
447
|
+
- **N** - quantity of thumbnails for your video - non-zero integer ranging from 1 to 50; defaults to 1.
|
|
448
|
+
- **number** - zero-based index of a particular thumbnail in a created set, ranging from 1 to (N - 1).
|
|
449
|
+
- **store** - a flag indicating if Uploadcare should store your transformed outputs.
|
|
643
450
|
|
|
644
451
|
```ruby
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
452
|
+
# Response
|
|
453
|
+
{
|
|
454
|
+
:result => [
|
|
455
|
+
{
|
|
456
|
+
:original_source=>"dc99200d-9bd6-4b43-bfa9-aa7bfaefca40/video/-/size/600x400/change_ratio/-/quality/best/-/format/ogg/-/cut/0:0:0.0/0:0:1.0/-/thumbs~2/1/",
|
|
457
|
+
:token=>911933811,
|
|
458
|
+
:uuid=>"6f9b88bd-625c-4d60-bfde-145fa3813d95",
|
|
459
|
+
:thumbnails_group_uuid=>"cf34c5a1-8fcc-4db2-9ec5-62c389e84468~2"
|
|
460
|
+
}
|
|
461
|
+
],
|
|
462
|
+
:problems=>{}
|
|
463
|
+
}
|
|
657
464
|
```
|
|
465
|
+
Params in the response:
|
|
466
|
+
- **result** - info related to your transformed output(-s):
|
|
467
|
+
- **original_source** - built path for a particular video with all the conversion operations and parameters.
|
|
468
|
+
- **token** - a processing job token that can be used to get a [job status](https://uploadcare.com/docs/transformations/video-encoding/#status) (see below).
|
|
469
|
+
- **uuid** - UUID of your processed video file.
|
|
470
|
+
- **thumbnails_group_uuid** - holds :uuid-thumb-group, a UUID of a [file group](https://uploadcare.com/api-refs/rest-api/v0.5.0/#operation/groupsList) with thumbnails for an output video, based on the thumbs [operation](https://uploadcare.com/docs/transformations/video-encoding/#operation-thumbs) parameters.
|
|
471
|
+
- **problems** - problems related to your processing job, if any.
|
|
658
472
|
|
|
659
|
-
|
|
660
|
-
(in this case, a “404: Not Found” error):
|
|
473
|
+
To convert multiple videos just add params as a hash for each video to the first argument of the `Uploadcare::VideoConverter#convert` method:
|
|
661
474
|
|
|
662
475
|
```ruby
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
476
|
+
Uploadcare::VideoConverter.convert(
|
|
477
|
+
[
|
|
478
|
+
{ video_one_params }, { video_two_params }, ...
|
|
479
|
+
],
|
|
480
|
+
store: false
|
|
481
|
+
)
|
|
668
482
|
```
|
|
669
483
|
|
|
670
|
-
|
|
484
|
+
|
|
485
|
+
To check a status of a video processing job you can simply use appropriate method of `Uploadcare::VideoConverter`:
|
|
671
486
|
|
|
672
487
|
```ruby
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
rescue Uploadcare::Error::RequestError => e
|
|
676
|
-
nil
|
|
677
|
-
end
|
|
488
|
+
token = 911933811
|
|
489
|
+
Uploadcare::VideoConverter.status(token)
|
|
678
490
|
```
|
|
679
|
-
|
|
680
|
-
Handling any Uploadcare service error:
|
|
491
|
+
`token` here is a processing job token, obtained in a response of a convert video request.
|
|
681
492
|
|
|
682
493
|
```ruby
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
nil
|
|
687
|
-
|
|
494
|
+
# Response
|
|
495
|
+
{
|
|
496
|
+
:status => "finished",
|
|
497
|
+
:error => nil,
|
|
498
|
+
:result => {
|
|
499
|
+
:uuid => "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40",
|
|
500
|
+
:thumbnails_group_uuid => "0f181f24-7551-42e5-bebc-14b15d9d3838~2"
|
|
501
|
+
}
|
|
502
|
+
}
|
|
688
503
|
```
|
|
689
504
|
|
|
690
|
-
|
|
691
|
-
|
|
505
|
+
Params in the response:
|
|
506
|
+
- **status** - processing job status, can have one of the following values:
|
|
507
|
+
- *pending* — video file is being prepared for conversion.
|
|
508
|
+
- *processing* — video file processing is in progress.
|
|
509
|
+
- *finished* — the processing is finished.
|
|
510
|
+
- *failed* — we failed to process the video, see error for details.
|
|
511
|
+
- *canceled* — video processing was canceled.
|
|
512
|
+
- **error** - holds a processing error if we failed to handle your video.
|
|
513
|
+
- **result** - repeats the contents of your processing output.
|
|
514
|
+
- **thumbnails_group_uuid** - holds :uuid-thumb-group, a UUID of a file group with thumbnails for an output video, based on the thumbs operation parameters.
|
|
515
|
+
- **uuid** - a UUID of your processed video file.
|
|
516
|
+
|
|
517
|
+
More examples and options can be found [here](https://uploadcare.com/docs/transformations/video-encoding/#video-encoding)
|
|
692
518
|
|
|
693
|
-
|
|
519
|
+
##### Document
|
|
694
520
|
|
|
695
|
-
|
|
521
|
+
Uploadcare allows converting documents to the following target formats: doc, docx, xls, xlsx, odt, ods, rtf, txt, pdf, jpg, png. Document Conversion works via our [REST API](https://uploadcare.com/api-refs/rest-api/v0.6.0/).
|
|
696
522
|
|
|
697
|
-
|
|
698
|
-
|
|
523
|
+
After each document file upload you obtain a file identifier in UUID format.
|
|
524
|
+
Then you can use this file identifier to convert your document to a new format:
|
|
699
525
|
|
|
700
|
-
```
|
|
701
|
-
|
|
702
|
-
|
|
526
|
+
```ruby
|
|
527
|
+
Uploadcare::DocumentConverter.convert(
|
|
528
|
+
[
|
|
529
|
+
{
|
|
530
|
+
uuid: "dc99200d-9bd6-4b43-bfa9-aa7bfaefca40",
|
|
531
|
+
format: "pdf"
|
|
532
|
+
}
|
|
533
|
+
],
|
|
534
|
+
store: false
|
|
535
|
+
)
|
|
536
|
+
```
|
|
537
|
+
or create an image of a particular page (if using image format):
|
|
538
|
+
```ruby
|
|
539
|
+
Uploadcare::DocumentConverter.convert(
|
|
540
|
+
[
|
|
541
|
+
{
|
|
542
|
+
uuid: "a4b9db2f-1591-4f4c-8f68-94018924525d",
|
|
543
|
+
format: "png",
|
|
544
|
+
page: 1
|
|
545
|
+
}
|
|
546
|
+
],
|
|
547
|
+
store: false
|
|
548
|
+
)
|
|
703
549
|
```
|
|
704
550
|
|
|
705
|
-
|
|
551
|
+
This method accepts options to set properties of an output file:
|
|
706
552
|
|
|
707
|
-
|
|
553
|
+
- **uuid** — the file UUID-identifier.
|
|
554
|
+
- **format** - defines the target format you want a source file converted to. The supported values are: `pdf` (default), `doc`, `docx`, `xls`, `xlsx`, `odt`, `ods`, `rtf`, `txt`, `jpg`, `png`. In case the format operation was not found, your input document will be converted to `pdf`.
|
|
555
|
+
- **page** - a page number of a multi-paged document to either `jpg` or `png`. The method will not work for any other target formats.
|
|
556
|
+
|
|
557
|
+
```ruby
|
|
558
|
+
# Response
|
|
559
|
+
{
|
|
560
|
+
:result => [
|
|
561
|
+
{
|
|
562
|
+
:original_source=>"a4b9db2f-1591-4f4c-8f68-94018924525d/document/-/format/png/-/page/1/",
|
|
563
|
+
:token=>21120220
|
|
564
|
+
:uuid=>"88fe5ada-90f1-422a-a233-3a0f3a7cf23c"
|
|
565
|
+
}
|
|
566
|
+
],
|
|
567
|
+
:problems=>{}
|
|
568
|
+
}
|
|
569
|
+
```
|
|
570
|
+
Params in the response:
|
|
571
|
+
- **result** - info related to your transformed output(-s):
|
|
572
|
+
- **original_source** - source file identifier including a target format, if present.
|
|
573
|
+
- **token** - a processing job token that can be used to get a [job status](https://uploadcare.com/docs/transformations/document-conversion/#status) (see below).
|
|
574
|
+
- **uuid** - UUID of your processed document file.
|
|
575
|
+
- **problems** - problems related to your processing job, if any.
|
|
708
576
|
|
|
709
|
-
|
|
710
|
-
- [@vizvamitra](https://github.com/vizvamitra)
|
|
711
|
-
- [@dmitry-mukhin](https://github.com/dmitry-mukhin)
|
|
712
|
-
- [@zenati](https://github.com/zenati)
|
|
713
|
-
- [@renius](https://github.com/renius)
|
|
577
|
+
To convert multiple documents just add params as a hash for each document to the first argument of the `Uploadcare::DocumentConverter#convert` method:
|
|
714
578
|
|
|
715
|
-
|
|
579
|
+
```ruby
|
|
580
|
+
Uploadcare::DocumentConverter.convert(
|
|
581
|
+
[
|
|
582
|
+
{ doc_one_params }, { doc_two_params }, ...
|
|
583
|
+
],
|
|
584
|
+
store: false
|
|
585
|
+
)
|
|
586
|
+
```
|
|
716
587
|
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
588
|
+
To check a status of a document processing job you can simply use appropriate method of `Uploadcare::DocumentConverter`:
|
|
589
|
+
|
|
590
|
+
```ruby
|
|
591
|
+
token = 21120220
|
|
592
|
+
Uploadcare::DocumentConverter.status(token)
|
|
593
|
+
```
|
|
594
|
+
`token` here is a processing job token, obtained in a response of a convert document request.
|
|
595
|
+
|
|
596
|
+
```ruby
|
|
597
|
+
# Response
|
|
598
|
+
{
|
|
599
|
+
:status => "finished",
|
|
600
|
+
:error => nil,
|
|
601
|
+
:result => {
|
|
602
|
+
:uuid => "a4b9db2f-1591-4f4c-8f68-94018924525d"
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
```
|
|
721
606
|
|
|
722
|
-
|
|
723
|
-
|
|
607
|
+
Params in the response:
|
|
608
|
+
- **status** - processing job status, can have one of the following values:
|
|
609
|
+
- *pending* — document file is being prepared for conversion.
|
|
610
|
+
- *processing* — document file processing is in progress.
|
|
611
|
+
- *finished* — the processing is finished.
|
|
612
|
+
- *failed* — we failed to process the document, see error for details.
|
|
613
|
+
- *canceled* — document processing was canceled.
|
|
614
|
+
- **error** - holds a processing error if we failed to handle your document.
|
|
615
|
+
- **result** - repeats the contents of your processing output.
|
|
616
|
+
- **uuid** - a UUID of your processed document file.
|
|
617
|
+
|
|
618
|
+
More examples and options can be found [here](https://uploadcare.com/docs/transformations/document-conversion/#document-conversion)
|
|
619
|
+
|
|
620
|
+
## Useful links
|
|
621
|
+
|
|
622
|
+
* [Development](https://github.com/uploadcare/uploadcare-ruby/blob/main/DEVELOPMENT.md)
|
|
623
|
+
* [Uploadcare documentation](https://uploadcare.com/docs/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
|
624
|
+
* [Upload API reference](https://uploadcare.com/api-refs/upload-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
|
625
|
+
* [REST API reference](https://uploadcare.com/api-refs/rest-api/?utm_source=github&utm_medium=referral&utm_campaign=uploadcare-ruby)
|
|
626
|
+
* [Changelog](./CHANGELOG.md)
|
|
627
|
+
* [Contributing guide](https://github.com/uploadcare/.github/blob/master/CONTRIBUTING.md)
|
|
628
|
+
* [Security policy](https://github.com/uploadcare/uploadcare-ruby/security/policy)
|
|
629
|
+
* [Support](https://github.com/uploadcare/.github/blob/master/SUPPORT.md)
|