1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/README.md

81 lines
2.1 KiB
Markdown
Raw Normal View History

2017-07-06 05:34:21 -04:00
# Active Storage
2017-06-30 13:12:58 -04:00
Active Storage makes it simple to upload and reference files in cloud services, like Amazon S3 or Google Cloud Storage,
and attach those files to Active Records. It also provides a disk service for testing or local deployments, but the
2017-07-05 12:30:15 -04:00
focus is on cloud storage.
2017-06-30 13:12:58 -04:00
2017-07-06 09:39:10 -04:00
## Examples
2017-06-30 13:12:58 -04:00
2017-07-05 12:30:15 -04:00
One attachment:
2017-07-01 06:11:04 -04:00
```ruby
2017-07-05 10:28:45 -04:00
class User < ApplicationRecord
has_one_attached :avatar
2017-06-30 13:12:58 -04:00
end
2017-07-05 10:28:45 -04:00
user.avatar.attach io: File.open("~/face.jpg"), filename: "avatar.jpg", content_type: "image/jpg"
user.avatar.exist? # => true
2017-06-30 13:12:58 -04:00
2017-07-05 10:28:45 -04:00
user.avatar.purge
user.avatar.exist? # => false
2017-06-30 13:12:58 -04:00
user.avatar.url(expires_in: 5.minutes) # => /rails/blobs/<encoded-key>
2017-06-30 13:12:58 -04:00
2017-07-05 10:28:45 -04:00
class AvatarsController < ApplicationController
2017-06-30 13:12:58 -04:00
def update
2017-07-05 10:28:45 -04:00
Current.user.avatar.attach(params.require(:avatar))
redirect_to Current.user
2017-06-30 13:12:58 -04:00
end
end
2017-07-01 06:11:04 -04:00
```
2017-06-30 13:12:58 -04:00
2017-07-05 12:30:15 -04:00
Many attachments:
```ruby
class Message < ApplicationRecord
has_many_attached :images
end
2017-07-06 10:23:00 -04:00
```
2017-07-05 12:30:15 -04:00
2017-07-06 10:23:00 -04:00
```erb
2017-07-05 12:30:15 -04:00
<%= form_with model: @message do |form| %>
<%= form.text_field :title, placeholder: "Title" %><br>
<%= form.text_area :content %><br><br>
2017-07-06 10:23:00 -04:00
2017-07-05 12:30:15 -04:00
<%= form.file_field :images, multiple: true %><br>
<%= form.submit %>
<% end %>
2017-07-06 10:23:00 -04:00
```
2017-07-05 12:30:15 -04:00
2017-07-06 10:23:00 -04:00
```ruby
2017-07-05 12:30:15 -04:00
class MessagesController < ApplicationController
def create
message = Message.create! params.require(:message).permit(:title, :content)
message.images.attach(params[:message][:images])
redirect_to message
end
end
```
## Installation
2017-07-05 12:30:15 -04:00
1. Add `require "active_storage"` to config/application.rb.
2017-07-06 09:43:14 -04:00
2. Run `rails activestorage:install` to create needed directories, migrations, and configuration.
3. Configure the storage service in `config/environments/*` with `config.active_storage.service = :local`
that references the services configured in `config/storage_services.yml`.
2017-07-05 12:30:15 -04:00
2017-07-05 12:44:58 -04:00
## Todos
2017-07-06 10:04:08 -04:00
- Document all the classes
2017-07-05 12:44:58 -04:00
- Strip Download of its resposibilities and delete class
- Proper logging
- Convert MirrorService to use threading
2017-07-05 12:44:58 -04:00
- Read metadata via Marcel?
- Add Migrator to copy/move between services
2017-07-05 12:44:58 -04:00
- Explore direct uploads to cloud
- Extract VerifiedKeyWithExpiration into Rails as a feature of MessageVerifier
2017-06-30 13:12:58 -04:00
## License
2017-07-06 05:34:21 -04:00
Active Storage is released under the [MIT License](https://opensource.org/licenses/MIT).