RoR / Refile Gem - Microsoft Edge中未加载的图像

时间:2016-08-22 15:35:48

标签: ruby-on-rails ruby microsoft-edge refile

我们正在使用refile gem在我们的平台上显示图像,它们在除Microsoft Edge之外的其他浏览器上运行良好。 Microsoft Edge是否有不同的格式或限制,我应该知道它?

(我没有Microsoft Edge,因此无法直接测试)

任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:1)

我已使用MS Edge 25.10586.0.0 / EdgeHTML 13.10586进行了检查,但未显示图像。

我认为这是因为图像是作为application / octet-stream发送的,而Edge没有足够的信息来显示它们(需要确认)。

但在refile github page上,您可以看到可以为每个加载的文件添加元数据,如:

class StoreMetadata < ActiveRecord::Migration
  def change
    add_column :users, :profile_image_filename, :string
    add_column :users, :profile_image_size, :integer
    add_column :users, :profile_image_content_type, :string
  end
end

这些字段将在文件加载后自动填充,并修复我的refile示例应用程序上的问题。

免责声明:请注意以下操作,请先在生产环境中进行一些测试

可以在现有文件中添加缺失的信息。

目前Refile似乎只使用文件扩展名来提取内容类型。因此,我们需要使用文件内容提取内容类型,并为每个上传的文件创建一个带有相应扩展名的文件名。

可能有很多方法可以做到这一点。我将描述我在我的refile应用程序中使用的方法。

这是我的用户模型

class User < ActiveRecord::Base
  attachment :profile_image
end

首先运行上一次迁移以添加缺少的字段。

在gemfile中添加gem mimemagic并运行bundel install。这个可以通过内容确定文件的内容类型。

然后为每个User提取profile_image的内容类型并添加正确的文件名。

User.all.each do |u|
  subtype = MimeMagic.by_magic(u.profile_image.read).subtype
  u.profile_image_filename = "profile_image.#{subtype}" if u.profile_image_filename.nil?
  u.save
 end

这就是全部。