通过资产/图像或AWS亚马逊上传?

时间:2016-01-07 02:07:38

标签: ruby-on-rails image amazon-web-services heroku amazon-s3

因此,在我的网站上,用户可以上传“灵感”,即用户感到鼓舞人心的图片或文字。

现在我要创建一个功能,比如pinterest,用户可以点击预装的图片或文字来“固定”,除了我的按钮说 - “让我的灵感”。

我不确定在这个页面上我是否正在创建: pages / suggested_inspirations.html.erb 如果我应该通过资产/图片或AWS亚马逊上传建议的图片?在后一种情况下,我会向 inspirations / new.html.erb 添加一个复选框,仅对管理员用户可见,如果点击该复选框,则会将灵感保存到我的suggest_inspirations页面。

我将AWS Amazon-S3用于用户上传的图像。现在我正在进行免费计划。

2 个答案:

答案 0 :(得分:0)

从评论部分复制

似乎您的问题更多的是关于您的应用程序的大小。如果您要提供数百万张图片并且速度是一个因素,我建议您选择亚马逊S3。由于您已经在AWS堆栈上,因此它可以简化您的扩展。在您的服务器上存储图像会阻止您进行缩放,会降低图像服务部分的速度,此外您还必须处理图像查看限制(管理员与非管理员),如果您在s3上,则可以轻松实现。

我从一开始就使用s3。另外,为您的存储桶设置云端。 aws.amazon.com/cloudfront鉴于您的需求,成本应该非常便宜。在s3上传图像时也不要忘记设置正确的缓存控制标题:)

答案 1 :(得分:0)

这听起来好像你对结构感到困惑

  

用户可以点击预先加载的图片或文字来“固定”#34;

这应该使用连接表:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :uploads

   has_many :likes
   has_many :liked_uploads, through: :likes, class_name: "Upload", association_foreign_key: :upload_id
end

#app/models/like.rb
class Like < ActiveRecord::Base
   belongs_to :user
   belongs_to :upload
end

#app/models/upload.rb
class Upload < ActiveRecord::Base
   belongs_to :user #-> uploader

   has_many :likes
   has_attached_file :image #-> paperclip
end

这样,您就可以拥有尽可能多的&#34;上传内容&#34;如你所愿(IE用户可以上传图片或文字),然后拥有尽可能多的用户&#34;喜欢&#34;它

图片将上传一次single source of truth),任何人都喜欢&#34;喜欢&#34;它只会通过连接模型添加一个引用:

#config/routes.rb
resources :inspirations do
   match :like, via: [:post, :delete], on: :member #-> url.com/inspirations/:id/like
end

#app/controllers/inspirations_controller.rb
class InspirationsController < ApplicationController
  before_action :authenticate_user!, only: :like

  def like
     @inspiration = Upload.find params[:id]
     if request.post? 
        current_user.likes << @inspiration
     elsif request.delete?
        current_user.likes.delete @inspiration
     end
  end
end

您可以更改上述方式。

  

用户可以上传&#34;灵感&#34;又名照片

如果您有支持它的模型,则只能 PaperclipCarrierwave是最好的宝石。

无法将图片上传到assets/images文件夹。 asset pipeline旨在提供您在views等内使用的图片。

Paperclip works with S3 out of the box - 实施Upload模式,您就可以直接将图片上传到S3