Загрузить файл на S3 с сервера rails - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы загрузить файл в корзину Amazon S3 из приложения rails.Файл приходит через пользователя, загружающего его.У меня возникают трудности с поиском подходящей документации для этого из-за разных версий aws-sdk.Кроме того, acl: :public_read является преднамеренным.Я хочу, чтобы только авторизованные пользователи загружали файлы, но любой должен иметь к ним доступ.

Моя текущая проблема в том, что я не могу проиндексировать загруженную коллекцию с отложенным доступом .Google не предоставляет полезной информации о том, как не загружать его лениво.

Вот мой соответствующий код.Обратите внимание, что действия контроллера для new и show пока пусты.

messages_controller.rb

  def create
    # Creates the file object
    obj = $S3.bucket(TEST_BUCKET).objects[params[:file].original_filename]

    # Uploads the file
    obj.write(
       file: params[:file],
       acl: :public_read
    )
  end

new.html.erb

<h1>Upload a file</h1>

<%= form_tag messages_path, enctype: 'multipart/form-data' do %>
  <%= file_field_tag :file  %>
  <%= submit_tag 'Upload file' %>
<% end %>

Я использую маршруты restful, поэтому единственная соответствующая информация о маршрутизации - resources :messages

Я использую rails 6.0.0beta, но это не так важно.Я использую версию 3 драгоценного камня aws-sdk.

1 Ответ

0 голосов
/ 31 января 2019

В итоге я нашел решение.Я не знаю, как решить проблему с отложенной загрузкой, но есть лучший способ.

В действии создания контроллера

def create
  obj = $S3.bucket(TEST_BUCKET).object('key_name')
  obj.put(body: params[:file].to_io)
end

Потребуются дополнительные исследования, чтобы применить к нему те атрибуты, которые мне нужны, но это должно помочь кому-либо еще исследовать 3!разные версии документации SDK.

Метод .to_io в файле необходим для получения доступа к фактическому файлу, который находится в объекте params[:file].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...