S3以最少的步骤上传

时间:2013-12-14 03:34:06

标签: ruby-on-rails amazon-s3

所以我设置我的应用程序将文档上传到S3(跟随Ryan Bates的railscast)。目前,有一个上传文件的表单位于文档资源的索引页面上。成功上传到S3后,该表单将呈现用户可以重命名文件的新操作(因为它在本地命名)。

但我想重构一下,以消除将用户重定向到'/ new'页面。我不想让用户有机会重命名该文件。

必须有一种方法将文件上传到S3,然后将其发布到创建操作。

这就是我的控制器现在的样子。

class DocumentsController < ApplicationController

  before_filter :authenticate_user!

  def index
    @page_title = "Docs"
    @documents = household.documents.all
    @uploader = Document.new.file_upload
    @uploader.success_action_redirect = new_document_url
  end

  def new
    @page_title = "New Doc"
    @document = Document.new(household_id: household.id, key: params[:key])
  end

  def create
    @doc = Document.new(params[:document])
    if @doc.save
      flash[:notice] = "Consider it done!"
      redirect_to documents_path
    else
      flash[:notice] = "Oops. Please try again."
      render 'new'
    end
  end
end

如何简化这种情况并避免渲染/新页面?而不是渲染/ new,我想发布到create动作。我需要修改这一行:

@uploader.success_action_redirect = new_document_url

但我不知道应该是什么。

1 个答案:

答案 0 :(得分:1)

也许您可以在DocumentsController中创建一个充当REST端点的方法。您通过Ajax从客户端发布,然后在端点方法中上传到S3。这样,客户的体验在上传时保持不变。

这样的事情:

def upload
    uploader = Document.new(params_from_ajax_post).file_upload
    respond_to do |format|
      format.html { render :json => {:message => 'Upload successful.'} }
    end
end

routes.rb

match 'documents/upload' => 'documents#upload', :via => :post, :as => 'upload'