Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails和carrierwave-图像可以上传,但pdf';s can';T_Ruby On Rails_Ruby_Imagemagick_Carrierwave_Minimagick - Fatal编程技术网

Ruby on rails Rails和carrierwave-图像可以上传,但pdf';s can';T

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

我已经成功地使用载波上传图像文件。我希望表单能够接受图像文件和pdf。当我尝试上载pdf时,它不会上载文件。这与线路有关:

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[166166] 结束 def扩展白名单 %w(jpg jpeg gif png pdf文档docx) 结束 结束 有人知道我如何修复它,使图像和pdf的工作?谢谢

更新:

公文包展示页面(2个版本):

第1版:

<% @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文件的内容类型中将不包含“图像”。如果此响应有效,是否可以将其标记为已解决?:)至于第二条评论,这是另一个问题。您可以再次询问文件是否为查看内容类型的图像。我不记得现在该怎么做了,你可以用谷歌搜索。如果我能的话,我以后再查一下。我会用你的第二个版本。您可以使用的响应来检查文件是否为图像。