Ruby on rails Rails和carrierwave-图像可以上传,但pdf';s can';T
我已经成功地使用载波上传图像文件。我希望表单能够接受图像文件和pdf。当我尝试上载pdf时,它不会上载文件。这与线路有关:Ruby on rails Rails和carrierwave-图像可以上传,但pdf';s can';T,ruby-on-rails,ruby,imagemagick,carrierwave,minimagick,Ruby On Rails,Ruby,Imagemagick,Carrierwave,Minimagick,我已经成功地使用载波上传图像文件。我希望表单能够接受图像文件和pdf。当我尝试上载pdf时,它不会上载文件。这与线路有关: process :resize_to_fill => [166,166] 如果我把它去掉,pdf的工作。问题是我需要这行,因为我需要上传的所有图片需要调整大小。 这是上传程序: class PortfoliofileUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMag
process :resize_to_fill => [166,166]
如果我把它去掉,pdf的工作。问题是我需要这行,因为我需要上传的所有图片需要调整大小。
这是上传程序:
class PortfoliofileUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :picture do
process :resize_to_fill => [166,166]
end
def extension_white_list
%w(jpg jpeg gif png pdf doc docx)
end
end
类PortfoliofileUploader<% @portfolio.portfolio_pics.collect{|picture| picture.port_pic.picture}.each do |pic| %>
<li><a href="#"><%= image_tag pic %></a></li>
<% end %>
第2版:
<% @portfolio.portfolio_pics.each do |pic| %>
<li><a href="#"><%= image_tag pic.port_pic.picture %></a></li>
<% end %>
Carrierwave对此有一个解决方案,具体如下:
条件版本
有时,您希望根据模型中的某些属性或图片本身限制版本的创建
class MyUploader < CarrierWave::Uploader::Base
version :human, :if => :is_human?
version :monkey, :if => :is_monkey?
version :banner, :if => :is_landscape?
protected
def is_human? picture
model.can_program?(:ruby)
end
def is_monkey? picture
model.favorite_food == 'banana'
end
def is_landscape? picture
image = MiniMagick::Image.open(picture.path)
image[:width] > image[:height]
end
end
在这种情况下,请确保包括MimeTypes:
include CarrierWave::MimeTypes
Carrierwave对此有一个解决方案,具体如下: 条件版本 有时,您希望根据模型中的某些属性或图片本身限制版本的创建
class MyUploader < CarrierWave::Uploader::Base
version :human, :if => :is_human?
version :monkey, :if => :is_monkey?
version :banner, :if => :is_landscape?
protected
def is_human? picture
model.can_program?(:ruby)
end
def is_monkey? picture
model.favorite_food == 'banana'
end
def is_landscape? picture
image = MiniMagick::Image.open(picture.path)
image[:width] > image[:height]
end
end
在这种情况下,请确保包括MimeTypes:
include CarrierWave::MimeTypes
成功了!我甚至不需要包括mimetype。那是怎么回事?没有一个文件实际上是以字符串“image”开头的,实际上有一个东西仍然不能用这个。当我尝试循环浏览公文包展示页面中的图片时,它仍然包含pdf,并包含pdf的问号图像。如何使其仅显示pdf?我将在内容中添加循环代码。对于第一条注释,它不会在图像文件名中查找“字符串”,而是在文件内容类型中查找。PDF文件的内容类型中将不包含“图像”。如果此响应有效,是否可以将其标记为已解决?:)至于第二条评论,这是另一个问题。您可以再次询问文件是否是查看内容类型的图像。我不记得现在该怎么做了,你可以用谷歌搜索。如果可以的话,我以后再查。我会用你的第二个版本。您可以使用的响应来检查文件是否为图像。这很有效!我甚至不需要包括mimetype。那是怎么回事?没有一个文件实际上是以字符串“image”开头的,实际上有一个东西仍然不能用这个。当我尝试循环浏览公文包展示页面中的图片时,它仍然包含pdf,并包含pdf的问号图像。如何使其仅显示pdf?我将在内容中添加循环代码。对于第一条注释,它不会在图像文件名中查找“字符串”,而是在文件内容类型中查找。PDF文件的内容类型中将不包含“图像”。如果此响应有效,是否可以将其标记为已解决?:)至于第二条评论,这是另一个问题。您可以再次询问文件是否为查看内容类型的图像。我不记得现在该怎么做了,你可以用谷歌搜索。如果我能的话,我以后再查一下。我会用你的第二个版本。您可以使用的响应来检查文件是否为图像。