繁体   English   中英

Rails:通过Carrierwave将图像上传到Amazon S3仅适用于“编辑”

[英]Rails: Uploading Images to Amazon S3 via Carrierwave only works on “Edit”

(图片属于帖子)

图像上传器可以工作,但仅当我在Post Edit上传图像时才有效。 我希望在创建Post时上传图像。

图片上传(“<%= f.file_field:image%>”)位于新帖子中,所以我猜测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后上传图像,以便它可以获得Post.id?

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

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

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

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

最诚挚的问候,Egbert

我也做了同样的事情,但我使用了cloudinary gem来维护我的图像。 你能告诉我你在哪里编写编辑动作的控制器。 我告诉你我的代码你可以和你的代码进行统计

在控制器中进行编辑操作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM