我注意到的一件事是,在我做的大多数项目中,一个需要很长时间(30秒+)的规范就是这个应该/回形针助手:
it { should validate_attachment_content_type(:bannerimage)
.allowing('image/png', 'image/jpeg', 'image/gif', 'image/jpg')
.rejecting('text/plain')
}
Run Code Online (Sandbox Code Playgroud)
我非常想保留内容类型验证,但我想知道是否有更快的方法来实现它.我已经用以下标记标记了这些测试:慢速运行rspec而没有:慢速规范,但是,我希望有人能够更快地测试图像内容类型.
在Rails 4中出现Paperclip上传问题 - ForbiddenAttributesError失败(强参数验证).拥有最新的回形针宝石和最新的rails 4宝石.
我有一个模型"图像",在模型中附加文件"上传":
has_attached_file :upload, :styles => { :review => ["1000x1200>", :png], :thumb => ["100x100>", :png]}, :default_url => "/images/:style/missing.png"
Run Code Online (Sandbox Code Playgroud)
图像模型是用脚手架创建的,我添加了回形针迁移.表单部分已更新为使用
f.file_field :upload
Run Code Online (Sandbox Code Playgroud)
表单生成一组典型的回形针参数,图像参数包含上传.我也在图像模型中传递了transaction_id,因此应该允许它.但就是这样 - 图像和交易ID.
我希望能够在我的控制器中编写以下内容以将我的帖子列入白名单 - 但它失败了:
def image_params
params.require(:image).permit(:transaction_id, :upload)
end
Run Code Online (Sandbox Code Playgroud)
所以我更明确 - 但也失败了:
def image_params
params.require(:image).permit(:transaction_id, :upload => [:tempfile, :original_filename, :content_type, :headers])
end
Run Code Online (Sandbox Code Playgroud)
我有点沮丧的是Rails 4没有告诉我ForbiddenAttributesError在开发环境中失败了 - 它应该显示错误但它没有 - 将是一个很好的补丁来简化开发.或者也许其他人都得到了我所缺少的东西!非常感谢你的帮助.
paperclip paperclip-validation strong-parameters ruby-on-rails-4
我发现Paperclip可以验证文件内容类型,即image/jpeg,但我想专门验证扩展名.这是因为我正在使用一个不起作用的扩展,它不会获得一致的内容类型.任何人都知道这是可行的,还是一个很好的方法来做到这一点?
我paperclip用于文件上传.验证如下:
validates_attachment_content_type :upload, :content_type=>['application/pdf'],
:if => Proc.new { |module_file| !module_file.upload_file_name.blank? },
:message => "must be in '.pdf' format"
但是,我的客户今天抱怨他无法上传pdf.在调查之后,我从请求标题中了解到正在提交的文件content_type=application/octet-stream.
允许application/octet-stream允许上传多种类型的文件.
请提出解决方案来解决这个问题.
我使用paperclip将头像附加到我的用户身上,在我的模型中:
has_attached_file :avatar,
:styles => {square_tiny: '50x50#', square_small: '100x100#', square: '200x200#'}
Run Code Online (Sandbox Code Playgroud)
我有一张表格
<%= form_for(@user_profile,
:url => { :controller => :user_profiles, :action => :update_general_info, :id => @user_profile.id },
:html => { :multipart => true,
:class=> "form-horizontal" }) do |f| %>
<div class="control-group">
<%= f.label :avatar, :class => "control-label" %>
<div class="controls">
<%= f.file_field :avatar %>
</div>
</div>
....
<% end %>
Run Code Online (Sandbox Code Playgroud)
上传工作完美,但我回来编辑我的用户,文件字段显示'没有选择文件'.由于我正在验证该头像的存在,每次用户编辑他的详细信息时,他都必须再次上传他的头像...
我该如何解决这个问题?
我认为这:multipart => true会有所帮助,但事实并非如此.
我正在使用paperclip在我的应用中上传图片.验证我是:
validates_attachment_content_type :image, :content_type => ['image/jpg','image/jpeg', 'image/png', 'image/tiff', 'image/gif']
Run Code Online (Sandbox Code Playgroud)
一切都适用于firefox,chorme和IE9.但在IE8中,我收到一个错误 - " 照片图像内容类型无效格式!!! "
任何解决方案或线索都非常感谢.
这是我的Image模型,其中我实现了一种验证附件尺寸的方法:
class Image < ActiveRecord::Base
attr_accessible :file
belongs_to :imageable, polymorphic: true
has_attached_file :file,
styles: { thumb: '220x175#', thumb_big: '460x311#' }
validates_attachment :file,
presence: true,
size: { in: 0..600.kilobytes },
content_type: { content_type: 'image/jpeg' }
validate :file_dimensions
private
def file_dimensions(width = 680, height = 540)
dimensions = Paperclip::Geometry.from_file(file.queued_for_write[:original].path)
unless dimensions.width == width && dimensions.height == height
errors.add :file, "Width must be #{width}px and height must be #{height}px"
end
end
end
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它不可重复使用,因为该方法采用宽度和高度的固定值.我想将其转换为自定义验证器,因此我也可以在其他模型中使用它.我已经阅读了有关此内容的指南,我知道在app/models/dimensions_validator.rb中它会是这样的:
class DimensionsValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
dimensions = …Run Code Online (Sandbox Code Playgroud) ruby-on-rails paperclip ruby-on-rails-3 paperclip-validation
我正在使用Paperclip gem for Rails,以便用户上传他们自己的照片.我明明只希望接受jpeg,gif或png图像.验证这些文件的正确方法是什么,而不是像word文档那样上传?
根据Paperclip文档,我使用以下内容验证内容类型:
validates_attachment :document, content_type: "application/pdf"
Run Code Online (Sandbox Code Playgroud)
什么是验证上述不同的图像格式(有道gif,png,jpeg)?
ruby-on-rails paperclip ruby-on-rails-3 paperclip-validation ruby-on-rails-3.2
我需要能够将电子邮件附加到模型,特别是 .eml 和 .msg 文件
Paperclip 现在需要验证使用它上传的文件类型。
我的代码中这些验证所在的部分在这里:
validates_attachment_content_type :supporting_document,
:content_type => ['application/pdf', 'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'image/jpeg', 'image/jpg', 'image/png',
'application/vnd.ms-excel.sheet.macroEnabled.12', 'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',EML_MIMETYPE],
:message => 'incorrect file type.'
Run Code Online (Sandbox Code Playgroud)
最后一部分 EML_MIMETYPE 用于 .eml 文件,并定义为常量:
EML_MIMETYPE = 'message/rfc822'
我通过在终端中对测试 .eml 文件使用 file 命令找到了 .eml 文件的正确 MIME 类型:
$ file -b --mime-type ~/Desktop/noname.eml
但是,当我对示例 .msg 文件执行此操作时,它会返回看起来像是损坏的 MIME 类型的内容
$ file -b --mime-type ~/Desktop/testemail.msg
>application/CDFV2-corrupt
Run Code Online (Sandbox Code Playgroud)
在线查看,此链接http://social.msdn.microsoft.com/Forums/en-US/8efe300d-c917-4be7-a0f3-e620e029842b/what-mime-type-can-i-use-for-msg-files ?forum=netfxnetcom建议也许使用 MIME 类型“application/vnd.ms-outlook”,但我没有运气。
有什么建议么?我正在运行 linux xubuntu 14.04,该应用程序使用 Rails 3.2.18 和 ruby 1.9.3p392
为什么某些 MP4 文件的 mime-type 是 application/octet-stream 而不是 video/mp4?
我已经在终端 (CLI) 中使用文件命令进行了检查
user@anto:~/Videos/VTB$ file --mime-type -b GDPR.mp4
video/mp4
user@anto:~/Videos/VTB$ file --mime-type -b Test-vid1.mp4
application/octet-stream
user@anto:~/Videos/VTB$ file --mime-type -b SampleVideoLarge.mov
video/quicktime
user@anto:~/Videos/VTB$ file --mime-type -b SampleVideo21.mp4
video/mp4
user@anto:~/Videos/VTB$ file --mime-type -b VTBSample-new.mp4
application/octet-stream.
Run Code Online (Sandbox Code Playgroud)
谁能告诉我原因吗?如何处理这种哑剧类型。带有application/octet-stream 的视频文件是正确的 mp4 文件还是错误的文件?