【问题标题】:Upload file to S3 from rails server从 Rails 服务器上传文件到 S3
【发布时间】:2019-06-24 08:14:39
【问题描述】:

我想从 Rails 应用程序将文件上传到 Amazon S3 存储桶。该文件来自用户上传它。由于 aws-sdk 的版本不同,我很难找到合适的文档。此外,acl: :public_read 是故意的。我只希望授权用户上传,但任何人都应该能够访问它。

我当前的问题是我无法索引到延迟加载的集合中。 Google 没有提供关于如何不延迟加载的有用信息。

这是我的相关代码。请注意,newshow 的控制器操作目前为空。

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 %>

我使用的是安静的路由,所以唯一相关的路由信息​​是 resources :messages

我正在运行 rails 6.0.0beta,这并不重要。我正在使用版本 3 的 aws-sdk gem。

【问题讨论】:

    标签: ruby-on-rails amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    我最终找到了解决方案。我不知道如何解决延迟加载问题,但有更好的方法。

    在创建控制器动作中

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

    需要更多调查才能将我想要的属性应用于它,但这应该有助于其他任何人搜索 3! sdk 文档的不同版本。

    需要文件上的.to_io 方法才能访问params[:file] 对象中的实际文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2011-02-12
      • 2019-09-13
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 2021-12-06
      • 2011-05-23
      相关资源
      最近更新 更多