1

我正在使用carrierwave_direct gem 将文件直接上传到S3,一切都很顺利。但是,当亚马逊重定向回 中指定的 URL 时success_action_redirect,我没有将上传的文件与对象关联。

我的控制器看起来像

def edit
  @excel_version = ExcelVersion.find(params[:id])
  @uploader = @excel_version.excel_everest_macro
  @uploader.success_action_redirect = edit_admin_excel_version_url
end


def update
  @excel_version = ExcelVersion.find(params[:id])
  @excel_version.assign_attributes(params[:excel_version])
  @excel_version.save
end

我的视图中有一个隐藏的表单字段,看起来像 = form_for @excel_version do |form| = form.hidden_​​field :key

因此,在我的更新操作中,我只是使用@excel_version.assign_attributes(params[:excel_version]) 亚马逊返回的密钥使其进入模型就好了。但是,安装在 @excel_version 对象上的上传程序没有获取 url,我无法设置链接来下载文件。

关于如何使用返回给我的 S3 参数将文件与模型关联起来的任何建议,因为carrierwave 通常会这样做?

谢谢!

PS 此处的另一个答案建议阅读 github 上的carrier_wave 直接文档,我已经并且发现在这方面没有帮助。

4

2 回答 2

0

要将图像与模型相关联,您可以在控制器中创建一个方法,该方法将使用来自亚马逊的参数并创建图像链接

例如你可以做 -

  def image_url
    respond_to do |format|
      format.json { render :json => { :filelink => "https://s3.amazonaws.com/#{params[:bucket]}/#{params[:key]}" } }
    end
  end

这段代码将做的是,当亚马逊成功重定向到 image_url 方法时,它将使用参数“bucket”和“key”来创建指向图像的精确链接。(发送的参数有键和桶名)

现在,您可以将此图像 url 放在视图上的隐藏对象中,这样当表单发布到服务器时,url 也会随之发布。您可以将其与您的模型相关联。

希望这可以帮助。它对我有用。

于 2013-03-07T17:23:54.367 回答
0

所以我的问题是我的hidden_field :key字段格式错误。我错误地将字段放在将direct_upload_form_for @uploader文件上传到 S3 的表单上。

当然,您需要用户在将文件发布到 S3:key返回的表单上的字段(即在传递给方法的 url 处)。S3 将在那里返回参数中的密钥,您可以将其与您的模型相关联。success_action_redirect

感谢所有有用的建议!

于 2013-03-08T17:50:47.313 回答