【问题标题】:Rails: Uploading Images to Amazon S3 via Carrierwave only works on "Edit"Rails:通过 Carrierwave 将图像上传到 Amazon S3 仅适用于“编辑”
【发布时间】:2012-06-26 14:38:19
【问题描述】:

(图片属于帖子)

图片上传器有效,但仅当我在 Post Edit 上上传图片时。我希望在创建帖子时上传图像。

图片上传(“”)在新帖子表单中,所以我猜测 Carrierwave 正在尝试在创建帖子之前将图像上传到指定路径,导致它不知道在哪里上传。

这是 ImageUploader 文件:

class TrackImageUploader < CarrierWave::Uploader::Base
  def cache_dir
   "#{Rails.root}/tmp/uploads"
  end

 include CarrierWave::RMagick

 #storage :file
 #storage :fog

 def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
 end

 version :featured do
   process :resize_to_fill => [210, 145]
 end

 def extension_white_list
   %w(jpg jpeg gif png)
 end
end

我猜上面代码中的 store_dir 负责将图像保存在 Amazon S3 上的相应路径中。

我将如何制作它以便在发布后上传图片,以便它可以获取 Post.id ?

【问题讨论】:

  • 你能把模型代码也发一下吗?
  • @John 给你:gist.github.com/2994293 谢谢!
  • 嗯,您可以尝试在模型中使用 AR 回调,看看强制保存是否有帮助。 api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
  • 最后,如果您的代码托管在任何其他类似网站的 github 上,您能否给我们您的应用程序的链接,以便我们尝试使用它并找到问题?
  • onvard.com/curators_guide - 这是网站。您只需单击绿色按钮并在其中上传图像。目前图像确实上传,但都被扭曲了。但是当我们编辑曲目并上传相同的图像时,图像的大小会完美契合。奇怪..

标签: ruby-on-rails ruby-on-rails-3 image amazon-s3 carrierwave


【解决方案1】:

我遇到了完全相同的问题,但我找到了解决方案。

我的 ImageUploader.rb 看起来像这样:https://gist.github.com/egbertp/7572501。在该文件的第 9 行,您将看到 include CarrierWaveDirect::Uploader。通过使用直接上传技术,您的站点用户将他/她的文件直接上传到 Rackspace 云。但是,在上传时,图像模型尚未在您的数据库中创建,从而导致错误(正如您猜对的那样)。

通过禁用直接上传技术,站点用户将图像发送到您的网络服务器,然后创建图像模型并将其保存在数据库中。在我的 ImageUploader 类中,这也是必要的,因为我希望我的网络服务器处理图像,以便创建缩略图版本。

我希望这会对您或将来的其他人有所帮助。

最好的问候, 埃格伯特

【讨论】:

    【解决方案2】:

    我也做过同样的事情,但我使用了 cloudinary gem 来维护我的图像。你能告诉我你的控制器你在哪里写了编辑动作吗? 我正在向你展示我的代码,你可以用 urs 来计算它

    在控制器中编辑操作

    def create
     @img = Image.new(params[:img])
      if @img.save
        redirect_to(:action => 'show')
      else
        render('c_view')
      end
    end 
    

    在拍摄图像的视图中

    <%= form_for :img, :url => {:action => "create"} do |f| %>
     <%= f.label "Upload an image"%>
        <%= f.hidden_field(:image_cache)%>
        <%= f.file_field :image %>      
    
     <%= f.submit "Submit", class: "btn btn-success"%>
        <% end %>
    

    为了在某些视图页面中显示图像,我使用了这个

    <% @img.each_with_index do |i|%>    
         <%= image_tag (i.image.url) %>
    <%end%>
    

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 2018-01-10
      • 2012-07-08
      • 2011-11-22
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多