【问题标题】:wicked_pdf_image_tag resolves to public folder when looking for imageswicked_pdf_image_tag 在查找图像时解析为公共文件夹
【发布时间】:2019-06-20 16:54:16
【问题描述】:

我想呈现用户以 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}")

但它会导致公共/公共文件夹,图像不在其中,而是向上一级。

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

【问题讨论】:

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


    【解决方案1】:

    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
    

    因此,当您需要一些变化时,没有什么可以阻止您直接使用带有正确图像 url/路径的 image_tag。问题是 wicked_pdf 需要本地文件系统的绝对文件路径才能呈现(以及用于 html 预览的纯图像 url):

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

    另外,original_filename 不是您存储中该文件的名称,它是上传期间客户端计算机上的文件名称。您需要使用存储路径,这取决于您的上传库,例如对于 Paperclip,这将类似于 yourmodel.image.path

    【讨论】:

    • 感谢您的建议。使用File.expand_path 让我正确检索图像。
    猜你喜欢
    • 2018-11-11
    • 2017-02-03
    • 2018-04-22
    • 2022-07-28
    • 2022-12-20
    • 2014-07-13
    • 2020-07-02
    • 2021-05-23
    • 2020-02-06
    相关资源
    最近更新 更多