Rails: 上传后访问图片文件

Rails: Accessing image files after being uploaded

我正在 Rails 5 应用程序上编写 Ruby。我刚刚学会了如何在不使用回形针、载波或重新归档的情况下上传图像。我过去使用过 refile,但对于这个应用程序,我想了解如何在没有那些第三方 gem 的情况下完成它。这并不难做到。我已成功上传文件。我的问题是之后访问图像!我认为这会很简单。但不是!

我有图像文件正在上传到“/public/images/page/image.jpg”

我已将“/public/images/page”添加到 app/initializers/assets.rb

中的资产路径

我试过像这样直接使用 img 标签:

<img class="pic left" src="/public/images/page/mars01.jpg" alt="Mars01" />

我收到“(没有路由匹配 [GET] “/public/images/page/mars01.jpg”)”错误。 我试过:

<%= image_tag "/public/images/page/#{@page.image}", class: 'pic left' %>

与标签基本相同,得到相同的结果。也试过:

<img class="pic left" src='<%= image_path "#{@page.image}" %>' />

仍然出现路由错误,但只在“/images”目录中查找。我仍处于开发模式,所以我认为 image_path 是正确的路径。

访问刚刚上传到资产管道之外目录的图像的正确方法是什么?这将在开发或生产环境中起作用吗?我真的认为这将是直截了当的。

您不必在 image_tag 中提供图像的完整路径,您只需提供图像名称和子目录(如果存在)。

所以尝试 <%= image_tag "#{@page.image}", class: 'pic left' %>

并且请阅读有关资产管道的更多信息。 http://guides.rubyonrails.org/asset_pipeline.html

这是我最终为感兴趣的人做的事情。

在我的控制器中我这样做了:

# default to development go to app/assets/images
path = Rails.root.join('app', 'assets', 'images', uploaded_io.original_filename)
if ENV['RAILS_ENV'] == 'production'
  # change only if in production to public/assets/images
  Rails.root.join('public', 'assets', 'images', uploaded_io.original_filename)
end
File.open(path, 'wb') do |file|
  file.write(uploaded_io.read)
end

基于RAILS_ENV;如果是开发,图像将转到 app/assests/images 文件夹;如果在生产中,他们会去 public/assets/images。

并直接使用 image_tag:

<%= image_tag "#{@page.image}" %>

工作起来很有魅力。好吧,至少我知道它在开发环境中有效。 感谢那些回应的人。 (垫、长崎)