`
peryt
  • 浏览: 55711 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • waiting: 既然都指定了dataType为'script'那就不必特别在b ...
    jQuery

play with paperclip plugin, 为model添加附件

阅读更多
我们首先生成一个新的rails程序
rails bookshop

然后安装scaffolding plugin, (因为这个模块被rails2.0赶出去,变成plugin了)
C:\workspace2\bookshop>ruby script/plugin install scaffolding

然后运行
ruby script/generate scaffold product title:string description:string image_url:string

这样就生成了controller and model and view 而且还有migration。
ok,可以start server了。

下面我们就介绍paperclip:
paperclip 使得为模型添加附件很简单。我们将用这个插件来为product模型添加一个图片作为附件。

首先安装这个plugin:
ruby script/plugin install git://github.com/thoughtbot/paperclip.git

安装完成之后,我们就可以使用这个plugin的generator来为我们product模型添加一个附件字段。

ruby script/generate paperclip product photo

这个generator接收2个参数,第一个是model的名字,第二个是附件字段的名字,同时会生成一个migration,这个migration添加了4个字段到我们模型,分别是:
add_column :products, :photo_file_name, :string
add_column :products, :photo_content_type, :string
add_column :products, :photo_file_size, :integer
add_column :products, :photo_updated_at, :datetime


然后,rake db:migrate, 更新数据库里面的products表

下一步我们应该更新product模型的代码了,我们需要使用 has_attached_file 来告诉他附件那些字段的是与attachment有关的:
class Product < ActiveRecord::Base
  has_attached_field :photo
end



2. 下面该修改view了
创建或者修改product的表格现在需要一个上传附件的功能了
<%for_for @product, :html=> {:multipart => true} do |form| %>
  <ol class="formList">
    <!--Other fields go here...-->
    <li>
      <%= form.label :photo, "Photo" %>
      <%= form.file_field :photo %>
    </li>
    <li>
      <%= form.submit "Submit" %>
    </li>
  </ol>


我们发现第一行的代码有一个我们从来没有见过的东西: :html=>{:multipart => true}
这个参数的作用是使得form_for 可以接受文件附件, 它将给form添加一个属性,
enctype="multipart/form_data"

当然,如果我们上传图片之后不显示出来怎么行呢,所以我们要修改show页面,
<%= image_tag @product.photo.url %>

ok, 现在我们可以看到我们上传的图片了。

但是很快我们图片太大了,所以我们需要服务器端收到图片后,做一下resize的工作(paperclip具有现成的功能)



3. resize 图片
has_attached_file  这个方法可以接受一些选项,其中styles允许我们重新定义图片的size, 要把用户上传的图片变成拇指大小, 我们只需要定义style并指定图片的size。

has_attached_file :photo, :styles => {:small => "150*150>"}
为什么最后会有一个">" 呢?, 这是为了保持图片的长宽比例,防止扭曲。
值得注意的是,要是resize起作用,你必须安装ImageMagick 这个gem

为了看到新的小图片,我们需要为image_tag @product.photo.url(:small)
(因为当用户上传是,服务器会保留原图片,并会生成新的小图片)



4. 设置paperclip的路径:
默认的,paperclip会将附件保存在public/system 目录下,
<img alt="Phone_large" src="system/photos/1/small/phone_large.jpg?1238845888"

paperclip创建他自己的保存附件的结构,生成一个以product id 命名的目录, 然后子目录是我们 在styles参数中定义的名字。 大多数情况下,这种默认的路径是ok的,但是我们也可以改变它。

要改变存储附件的路径,我们只需要给has_attached_file 添加两个参数:
has_attached_file :photo, :styles => {:small => "150x150>"},
  :url => "/system/:attachment/:id/:style/:basename.:extension",
  :path => ":rails_root/public/system/:attachment/:id/:style/:basename.:extension"


上面的代码中的url 和 path 是paperclip的默认值,如果我们想把附件存放在public/asset
那么我们的代码将是:
has_attached_file :photo, :styles => {:small => "150x150>"},
  :url => "/asset/products/:id/:style/:basename.:extension",
  :path => ":rails_root/public/asset/products/:id/:style/::basename.:extension"




5. validating
最后,我们看看paperclip是如何支持上传的文件的validate的,要validate上传的文件,我们可以把validator放在product模型的定义中,
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than => 5.megabytes
validates_attachment_content_type :photo, :content_type=> ['image/jpeg', 'image/png']


要注意的一点是,IE会报告与其他浏览器不同的MIME类型, 例如,他会把jped文件的类型看做 image/pjped 而不是 image/jpeg






分享到:
评论

相关推荐

    paperclip模板

    Paperclip - Responsive Professional Theme for Business Projects and Mobile Apps Perfect for business and personal use Built with LESS Looks great on all major browsers, tablets and phones 21 unique ...

    rails上传文件_paperclip

    通过上述内容,我们可以看到Paperclip为Rails应用中的文件上传提供了强大的功能和灵活性。无论是简单的图片上传还是复杂的文件管理,Paperclip都能轻松应对。在实际开发中,可以根据项目需求对这些知识点进行深入...

    Rails的文件附件扩展Paperclip.zip

    Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip

    paperclip-storage-encrypted_filesystem:使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展 Paperclip

    这个 gem 使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展了 Paperclip。 安装 将此行添加到应用程序的 Gemfile 中: gem 'paperclip-storage-encrypted_filesystem', git: '...

    paperclip

    回形针旨在用作ActiveRecord的简单文件附件库。 其目的是使设置尽可能简单,并尽可能将文件与其他属性一样对待。 这意味着它们不会保存到磁盘上的最终位置,也不会在设置为nil时被删除,直到调用ActiveRecord :: ...

    paperclip_torrent:生成一个.torrent文件以补充您的回形针上传

    将已处理的回形针附件转换为可下载的torrent文件,以供以后检索。 设置 当前,PaperclipTorrent在Paperclip上需要一个边缘版本以支持多种样式保存。 要使用,请将以下内容添加到您的Gemfile中: gem 'paperclip',...

    laravel-ide-helper-hook-paperclip:将Paperclip支持添加到Laravel IDE Helper

    composer require daniel-de-wit/laravel-ide-helper-hook-paperclip 回形针挂钩是使用加载的,如果禁用,请阅读“ 。 用法 正常运行标准模型生成命令: php artisan ide-helper:models "App\Models\Post" 手动...

    paperclip-av-transcoder, 使用 ffmpeg/avconv的Paperclip 音频/视频转码器.zip

    paperclip-av-transcoder, 使用 ffmpeg/avconv的Paperclip 音频/视频转码器 Paperclip 转码器使用 ffmpeg/avconv的Paperclip 音频/视频转码器。这是( https://github.com/owahab/paperclip-ffmpeg )的替代品。状态

    laravel-paperclip:雄辩的Laravel文件附件解决方案

    尽管名称如此,但不应将其视为Ruby的Paperclip宝石的匹配项。 它不使用文件存储本身,而是使用Laravel的内部存储驱动程序和配置。 这在使用了 ,并且此程序包可以使用其任何(和您的自定义书面形式)变体操作。 ...

    delay_paperclip:使用delay_job或Resque在后台处理您的回形针附件

    DelayedPaperclip使您可以通过在后台任务中处理附件 为什么? Paperclip最常见的用例是轻松将图像文件附加到ActiveRecord模型。 大多数情况下,这些图像文件将具有多种样式,并且在创建它们时需要调整大小。 这...

    paperclip-s3:未维护

    如果您实际上正在使用 ,并且您想要附件具有自定义路径。 请不要使用RAILS_ROOT 。 为什么? 每一个当您将应用程序部署到,您正在更改RAILS_ROOT,因此您所有上传的文件都将丢失,您的存储桶将一团糟! 默认的...

    paperclip-storage-ftp:允许回形针附件存储在FTP服务器上

    地位安装将此行添加到您的应用程序的Gemfile : gem "paperclip-storage-ftp" 然后执行: $ bundle 或手动安装: $ gem install paperclip-storage-ftp用法在代码中的某处: require "paperclip/storage/ftp" 在您的...

    paperclip-optimizer:缩小回形针图像上传

    什么是新的2015-01-16 2.0.0 更好的配置:按附件,每种样式全局设置选项感谢danschultzer , braindeaf和tirdadc的拉取请求,输入和报告默认情况下,所有可用的优化库均处于禁用状态以前的版本默认情况下启用...

    administrate-field-paperclip:用于管理的回形针字段插件

    将administrate-field-paperclip clipclip和kt-paperclip paperclip添加到您的Gemfile中: gem 'administrate-field-paperclip' gem 'kt-paperclip' 安装: $ bundle install 用法 按照上的开始使用模型和迁移。...

    Ruby-PaperClipActiveRecord的简单文件附件管理

    Ruby-PaperClip与ActiveRecord的集成为在Rails应用中实现简单的文件附件管理提供了一种方便的方法。PaperClip是由Thoughtbot开发的一个Ruby库,它允许开发者将文件上传功能轻松地添加到ActiveRecord模型中。让我们...

    paperclip_watermark:回形针处理器在图像上应用水印

    回形针水印描述这是一个简单的 Paperclip 处理器,用于在 Paperclip 的图像上应用水印。 水印将调整大小以适合基本图像。 很少有选项可用于指定位置和不透明度: watermark_distance_from_top : 以百分比指定从顶部...

    1.12.2paperclip.jar

    大家对服务端应该都不陌生了,我就不多介绍了,主要是点击server.jre,需要用JAVA8 64位运行,然后稍等一会,会生成mod文件夹,运行配置同意elua协议就可以开服务器了

    paperclip_database_attachments_responder:对 paperclip_database gem 的扩展

    回形针数据库附件响应器PaperclipDatabaseAttachmentsResponder 是一个扩展的 gem。 您不必再为downloads_files_for :user, :avatar提供带有downloads_files_for :user, :avatar特殊控制器!综合解决方案请查看我的...

    paperclip-s3-tutorial-korean:回形针文件上传到 s3 韩文

    gem ' paperclip ' 并运行 bundle install 创建 s3 这里 设置s3信息 从获取访问密钥和秘密密钥并将它们写好。 然后创建一个config/aws.yml文件 development: & default access_key_id: ' YOUR_ACCESS_KEY ' ...

    1.16.5-paperclip.jar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

Global site tag (gtag.js) - Google Analytics