如何在JS框中使用Active Storage显示图像的变体?

时间:2018-12-07 11:16:42

标签: ruby-on-rails variant rails-activestorage

在我看来,我可以在弹出窗口中以Active Storage显示附加到模型的文件:

 DownloadProfilePic() { ;
    var url = this.ProfilePic.nativeElement.src 
    window.open(url);
  }

运行良好。

enter image description here

问题是当我想在链接中使用变体时:

<a href="<%= rails_blob_path(@image.file, disposition: 'inline') %>" rel="example_group"><%= image_tag @image.variant('small') %></a>

使用的变体代码是:

<a href="<%= url_for(@image.variant('high')) %>" rel="example_group"><%= image_tag @image.variant('small') %></a>

链接似乎很好,但是当我单击图像时,该图像没有像以前一样在JS弹出窗口中打开,而是在新的浏览器窗口中打开。这很奇怪。

我缩短了链接。

file.variant(resize:size).processed.service_url

是“内容处理”问题吗?

1 个答案:

答案 0 :(得分:0)

好吧,这就是我所做的:

在我的图片模型中,我添加了一个动作并使用了url_helpers中的rails_representation_url()方法:

include Rails.application.routes.url_helpers#对此需要

  include Rails.application.routes.url_helpers 
  def get_variant(version="high", disposition="attachment")
    variant = file_variant(version)
    return rails_representation_url(variant, only_path: true, disposition: disposition)
  end

在我的html中,我可以使用附件处置调用我的方法:

<a href="<%= @image.get_variant('high', 'attachment') %>" rel="example_group">

我还可以直接从控制器下载图像变体:

def download
    redirect_to @image.get_variant('high', 'attachment')
end

如果只想在浏览器窗口中显示变体,则可以使用'inline':

redirect_to @image.get_variant('high', 'inline')

不确定这是最好的选择,但是它可以工作。