`
CaiDeHen
  • 浏览: 94268 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

File Column 的验证,中文提示,容易出错的细节和图片位置的获得

    博客分类:
  • ruby
阅读更多
先说验证问题。
按照传统的file_column :image, :magick => xxx
无论你想不想验证,file_column 都会验证上传的文件是不是图形文件,如果不是,它会在你的模型错误里面加"invalid image"。该错误验证的地方在 magick_file_column.rb里。查找
if options[:magick][:image_required]
  @magick_errors ||= []
  @magick_errors << "invalid image"
end

可以将第3行修改为:
  @magick_errors << (options[:error_message] || "invalid image")

这样,就可以在file_column 时加上 :error_message来提示非图形文件的错误信息。

然后,file column自带了3个错误验证方法:

validates_file_format_of 验证文件类型,也就是后缀名。options是:in
比如验证后缀为jpg png gif的图形文件可以
  validates_file_format_of :image, :in => ["gif", "png", "jpg"]

出错信息默认:"is not a valid format."
想修改为中文错误信息,可以修改validations.rb中的validates_file_format_of方法。
查找:
record.errors.add attr, "is not a valid format." unless extensions.include?(value.scan(EXT_REGEXP).flatten.first)
这一行
将其中的字符串改为你想要的中文即可,也可以用option的方法。我是改成。
options[:message] = [options[:messge]].to_s || "is not a valid format."
record.errors.add attr, options[:message] unless extensions.include?(value.scan(EXT_REGEXP).flatten.first)

这样就可以使用
  validates_file_format_of :image, :in => ["gif", "png", "jpg"], :message => "只能是后缀为jpg, png, gif的文件"


validates_filesize_of 验证文件大小,options也是:in
比如验证1M的文件
  validates_filesize_of :image, :in => 0..1.megabyte

错误信息分 太大 和 太小 两个。默认信息还是查看文件validations.rb的validates_filesize_of方法。可以参照validates_file_format_of的方法修改错误提示,改为我们习惯的:too_small和:too_large

第3个方法是验证图片大小 validates_image_size,是验证XxY的。不是文件大小。options只有:min。中文化参照前两个。

再来说说file column使用中容易出错的地方。
1.需要有数据库表对应字段。用来存文件名的
2.file_column_field和url_for_file_column 中如果用Symbol出错,最好都写成字符串,比如缩略图要用'thumb'不要:thumb
3.validates_filesize_of :image, :in => 0..1.megabyte 不会判空,所以 validates_present_of :image是必须的
4.上传的图片要resize,要在:magick里加:geometry,不要写到:versions里面了。
5.上传中文图片是乱码的问题,虽然注释掉filename.gsub!(/[^a-zA-Z0-9\.\-\+_]/,"_")可以,但是还是会不定期出现特殊问题,所以最好的是上传后修改文件名,在file_column.rb中搜索@filename = FileColumn::sanitize_filename(file.original_filename),将file.original_filename改成你想要的名字。

图片位置的获取:
用一个头像Portrait举例,User has_one Portrait
class Portrait < ActiveRecord::Base
  belongs_to :user
  file_column :image, :magick => { 
          :versions => { "thumb" => "72x72", "icon" => "36x36>"},
          :geometry => "150x150>", :error_message => "不是图形文件"
        }
  validates_filesize_of :image, :in => 0..1.megabyte, :too_large => "不能大于1M“
  validates_file_format_of :image, :in => ["gif", "png", "jpg"], :message => "必须是后缀为jpg png gif的图形文件"
  validates_presence_of :image
end

我们想在User里直接得到头像的原图,缩略图和图标,可以这样
class User < ActiveRecord::Base
  has_one :portrait
  
  def main_portrait
    "/portrait/image/" + portrait.send("image_relative_path")
  end

  def thumbnail
    "/portrait/image/" + portrait.send("image_relative_path", "thumb")
  end

  def icon
    "/portrait/image/" + portrait.send("image_relative_path", "icon")
  end
end

这样就可以直接使用:
<%= image_tag @user.thumbnail %>
分享到:
评论

相关推荐

    file-column-0.3.1.tar.gz

    file-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-column-0.3.1.tar.gzfile-...

    File 上传文件以及图片

    在本示例中,"File 上传文件以及图片" 的标题和描述指向了一个涉及文件和图片上传的代码实现。从提供的压缩包文件名(file1.aspx、file1.aspx.cs、ImageProcessFactory.cs)来看,这很可能是基于ASP.NET平台的一个...

    js验证上传图片 大小 格式

    在IT领域,特别是前端开发中,JavaScript(JS)被广泛应用于网页交互与数据验证,其中对上传图片的大小和格式进行验证是常见的需求之一。本文将深入解析如何使用JavaScript进行图片上传前的验证,包括检查图片格式、...

    点击图片触发input是file的事件

    "点击图片触发input是file的事件" 在 Web 开发中,经常会遇到上传图片的需求,而在上传图片时,通常需要实现在...同时,本文还介绍了 `window.createObjectURL` 方法、图片大小和格式的验证和 JQuery 的使用等知识点。

    input file上传图片预览

    在前端开发中,"input file上传图片预览"是一个常见的需求,它允许用户选择本地的图像文件,并在上传前提供预览。这个功能在许多网站和应用中都很实用,例如社交媒体平台、在线编辑器或者个人资料设置等。下面将详细...

    JS验证图片格式 有预览功能

    这个“JS验证图片格式 有预览功能”的主题主要关注如何利用JavaScript来检查用户上传的文件是否为合法的图片格式,并提供实时预览功能。以下将详细介绍这一技术实现的关键知识点。 1. **文件输入事件(File Input ...

    js获取 input file 图片立即显示

    "js获取input file 图片立即显示"这个话题就是关于如何利用JavaScript来实现在用户选择图片后即时预览的功能。以下是一个详尽的步骤解释和相关知识点: 1. **HTML 结构**: 首先,我们需要在HTML页面中创建一个`...

    php关于上传图片的验证

    下面将详细讲解标题和描述中提到的三种验证方法:后缀名验证、头信息验证以及二进制编码验证。 1. 后缀名验证: 后缀名验证是最基础的一种验证方式,它主要检查上传文件的扩展名是否符合预期的图片格式(如.jpg、....

    VC6.0中“Open File”与“Add to Project”出错+解决办法

    ### VC6.0中“Open File”与“Add to Project”功能异常及修复方法 #### 一、问题背景 Visual C++ 6.0 (简称VC6.0)是一款广泛应用于Windows平台上的C/C++集成开发环境。尽管该软件已发布多年,但由于其稳定性和...

    input type=file 显示的浏览 改成英文

    默认情况下,这个控件的文本提示和按钮是根据用户的操作系统语言来显示的,例如,在中文环境下会显示“浏览”或“选择文件”。然而,有些情况下,开发者可能希望统一界面的语言,比如将其设置为英文。本篇文章将详细...

    VC++6.0的FileTool

    6. **验证修复效果**:关闭FileTool,然后用VC++6.0重新打开修复后的工程文件,如果一切顺利,你应该能正常地编辑和编译项目了。 **注意事项** - 在使用FileTool之前,建议先备份原始工程文件,以防万一修复过程中...

    2、NIFI应用示例-GetFile和PutFile应用

    在Nifi中,`GetFile`和`PutFile`是两个基础但至关重要的处理器,它们负责从源位置读取文件并将其写入目标位置。 在本示例中,我们将探讨如何使用Nifi来实现简单的文件迁移: 1. **添加GetFile处理器**: - `Get...

    上传图片之前验证图片格式,同时实现预览

    在用户上传图片之前,验证图片格式以及提供预览功能是非常重要的步骤,这不仅可以确保上传的图片符合预期的格式要求,还可以为用户提供更好的交互体验。本文将详细讲解如何使用JavaScript来实现这个功能。 首先,...

    WebMethods Flat File user guide

    WebMethods是软件和技术公司webMethods, Inc.开发的一系列集成解决方案产品,这些产品主要应用于企业应用集成(EAI)、企业对企业的(B2B)电子商务、以及企业资源规划(ERP)等场景。在WebMethods的产品线中,包括...

    input type=file 及时预览图片

    这种功能极大地提升了用户体验,因为它允许用户在上传前确认图片的质量和效果。 首先,我们需要理解 `&lt;input type="file"&gt;` 的基本用法。在HTML代码中,创建一个这样的输入框非常简单: ```html &lt;input type="file...

    图片细节放大查看

    在网页设计和开发中,有时候我们需要提供一种方式让用户能够详细查看图片的某些部分,比如产品的细节、艺术作品的纹理等。这就是"图片细节放大查看"的功能。在这个场景中,JavaScript(JS)通常被用来实现这样的交互...

    上传图片前验证图片格式及实现预览

    为了提供良好的用户体验和系统安全性,开发者需要在用户上传图片前进行格式验证,确保图片符合规定的格式,并提供预览功能,让用户在提交前能查看上传效果。本文将详细讲解如何使用JavaScript(JS)在客户端实现这一...

    jQuery File Upload 基于Jquery的图片上传组件

    **jQuery File Upload** 是一个强大的基于 **jQuery** 的图片上传插件,专为网页上的文件上传功能设计。它提供了一套完整的解决方案,包括多文件选择、上传进度显示、取消与删除上传任务、预览上传图片等功能,使得...

    browser-md5-file-1.0.0.zip

    浏览器MD5文件处理库browser-md5-file是一款轻量级的JavaScript工具,主要用于在客户端计算文件的MD5哈希值。这个库特别适用于那些需要验证文件完整性的场景,比如上传文件时确保文件未被篡改或者在不同的设备间同步...

    FileAnalysis文件分析软件

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的信息映射为固定长度的摘要信息,常用于验证文件的完整性和一致性。当文件被复制、传输或修改时,MD5码会发生变化,因此,通过比较文件...

Global site tag (gtag.js) - Google Analytics