如何在Rails 4中使用jQuery文件上传?

ser*_*erg 3 upload jquery plugins ruby-on-rails image

我有一个简单的模型叫做RealEstateListing.

用户可以创建RealEstateListing并描述他们正在出售/租赁的房屋.我们希望允许用户为其列表上传最多5张图片,我们发现此插件名为jQuery File Upload.

http://blueimp.github.io/jQuery-File-Upload/


不幸的是,Rails的所有文档和指南似乎都停滞在Rails 3.2.x中

使用这个非常简单的模型示例,如何使用此插件上传图像并将图像与RealEstateListing.使用Rails 4 相关联?

Luk*_*oen 6

根据以下链接,Rails 4似乎支持jQuery File Upload:Gems Ready for Rails 4.

如果您想要使用Paperclip Gem执行文件上传,请按照我为您准备的指南.我从Pranava Swaroop学到了这个方法.

替代解决方案在以下链接:Stackoverflow:Rails 4多文件上传解决方案,Stackoverflow:Jquery文件上传到rails 4

1-将名为"image"的属性添加到R​​ealEstateListing资源中.然后运行'rake db:migrate'和/或'rake db:migrate RAILS_ENV = development'作为更新架构和数据库的相关内容.

class AddImageFieldsToRealEstateListing < ActiveRecord::Migration
  def change
    add_column :realestatelisting, :image_file_name, :string
    add_column :realestatelisting, :image_content_type, :string
    add_column :realestatelisting, :image_file_size, :integer
    add_column :realestatelisting, :image_uploaded_at, :datetime
  end
end
Run Code Online (Sandbox Code Playgroud)

2-更新您的Gemfile并使用Paperclip gem和Amazon Web Services等服务进行图像上传.然后运行'bundle install'来更新Gemfile.lock

gem 'paperclip'
gem 'aws-sdk'
Run Code Online (Sandbox Code Playgroud)

3-更新RealEstateListing控制器以确保允许'image'参数

def realestatelisting_params
  params.require(:realestatelisting).permit(:name,:image)
end
Run Code Online (Sandbox Code Playgroud)

4-更新app/helpers/application_helper.rb

def image_for_realestatelisting(house)
  if house.image.exists?
    image_tag(house.image.url, size:'200x200')
  else
    image_tag('image.jpg')
  end
end
Run Code Online (Sandbox Code Playgroud)

5-使用图像上传功能更新RealEstateListing模型

has_attached_file :image
validates_attachment :image, 
                     :content_type => { :content_type => ['image/jpeg', 'image/png'] }, 
                     :size => { :less_than => 2.megabyte }             
Run Code Online (Sandbox Code Playgroud)

6-使用图像上传字段更新RealEstateListing .html.erb视图

即创建上传

<div>
  <div>
    <%= f.label :image %><br/>
    <%= f.file_field :image %>
  </div>
</div>
<div>
  <%= f.submit "Create" %>
</div>
Run Code Online (Sandbox Code Playgroud)

即显示上传

<div>
  <%= image_for_realestatelisting(@house) %>
</div>
Run Code Online (Sandbox Code Playgroud)

请注意,Paperclip gem是一个抽象的Ruby库,在Ruby on Rails应用程序中使用它来降低ActiveRecord模型中文件上载的复杂性RealEstateListing.AWS SDK gem aws-sdk与Paperclip gem结合使用,提供了一个API客户端,用于将图像上传到应用程序进行模型验证,然后再存储在Amazon的S3文件托管服务上,以独立扩展应用程序的图像文件资源.Paperclip gem的规范包括处理图像文件的类方法选项,如ActiveRecord Model属性.Paperclip帮助器方法(has_attached_file)声明属性符号:image和图像文件附件之间的模型关联,而其辅助方法validates_attachment方便地包装多个属性(即图像文件附件的大小和MIME内容类型以防止XSS攻击)进行验证.

  • 如果你哭泣evertim喜欢dis - 因为我在哭!我回家的时候今晚要试试这个.感谢**百万**用于分享A-to-Z解决方案.这些是关于SO的有价值的答案,比如我的:http://stackoverflow.com/questions/16513066/devise-with-rails-4/20123452#20123452 (2认同)