Ruby - 如何使用 Shrine 从 data_uri (base64) 设置衍生文件名

Ruby - How to set derivatives filename with Shrine from data_uri (base64)

根据这个问题:

这非常适合我的用例,但是,创建的派生文件都具有文件名“image_processing_xxx”。 URL 看起来不错,但是当您右键单击下载每个图像时,文件名看起来不正确或与 URL 不匹配。

是否可以重命名这些文件以匹配新的原始文件名 - 并在每个文件的末尾(.png/.jpeg 之前)包含自定义的“_2x”或“_mobile”?我可以在某个地方覆盖它吗?我已经尝试了很多插件,但到目前为止我还没有这样的运气。

如果有人想做同样的事情,我已经测试了这个工作方法:

add_metadata :filename do |io, record: nil, derivative: nil, **context|

  # Get file extension
  mime_type = context[:metadata]['mime_type']
  extension = Shrine.infer_extension(mime_type)

  # Set filename
  if derivative
    "#{derivative.to_s.dasherize}-photo-#{record.slug}" + extension.to_s
  else
    "original-photo-#{record.slug}" + extension.to_s
  end

end

这给出了名为下载 URL 的派生词,以及原始文件的“原始”,两者都具有正确的文件扩展名。