wicked_pdf_image_tag在查找图像时解析为公用文件夹

时间:2019-06-20 16:54:16

标签: ruby-on-rails ruby wkhtmltopdf wicked-pdf ruby-on-rails-5.1

我想渲染用户以PDF格式上传的图像。 我将图像保存到当前的Rails目录public文件夹中。

此刻,图像正在保存在公用文件夹中。 一切都在开发中起作用,但是在生产中,它认为图像是资产的一部分,并引发“图像不在资产中”错误。 在开发中,它正在查看公用文件夹内的正确路径。 在使用下面的代码生产时,它将在public/public处查找图像。

这是我认为呈现PDF的代码。


    <% @images.each do |image| %>
      <% if Rails.env != "development" %>
        <%= wicked_pdf_image_tag ("public/#{image.original_filename}")%>
      <% else %>
        <%= wicked_pdf_image_tag(image.original_filename)%>
      <% end %>

    <% end %>

我尝试使用

wicked_pdf_image_tag("public/#{image.original_filename}")

,但是由于它在public / assets文件夹中,因此返回资产错误。

我也尝试使用

wicked_pdf_image_tag("/public#{image.original_filename}")

但是它会生成public / public文件夹,该图像不在其中,而是上一层。

当我尝试检索图像时,我希望wicked_pdf_image_tag查看图像的public/文件夹。

1 个答案:

答案 0 :(得分:2)

wicked_pdf_image_tagimage_tag的简写,其资产路径已通过错误的pdf规则解析(请参见wicked_pdf/wicked_pdf_helper/assets.rb):

def wicked_pdf_image_tag(img, options = {})
  image_tag wicked_pdf_asset_path(img), options
end

def wicked_pdf_asset_path(asset)
  if (pathname = asset_pathname(asset).to_s) =~ URI_REGEXP
    pathname
  else
    "file:///#{pathname}"
  end
end

因此,当您需要一些变体时,没有什么会阻止您直接将image_tag与正确的图像URL /路径一起使用。问题在于,wicked_pdf需要本地文件系统上的绝对文件路径来呈现(以及html预览的纯图像url):

image_tag "file://#{File.expand_path("public/your_image_path_goes_here.jpg")}"

也请注意,original_filename不是您存储中文件的名称,而是上载期间客户端计算机上文件的名称。您需要使用存储路径,这取决于您的上传库,例如对于Paperclip,它就像yourmodel.image.path