给定我在 Rails 中的 "application/msword" mime 类型,如何获得“.doc”文件扩展名?

How do I get a ".doc" file extension given my "application/msword" mime type in Rails?

我正在使用 Rails 5. 我将文件数据和 mime 类型存储在 PostGres 数据库中。然后我用

extension = Rack::Mime::MIME_TYPES.invert[mime_type]

当我return将文件中的数据提供给用户时,得到一个文件扩展名。但是,如果我的 mime 类型是

application/msword

上面的 return 是“.dot”,我发现这会引起我不成熟的用户群的混淆,因为他们更习惯于“.doc”扩展名。是否有我可以使用的不同 mime 类型,它会返回一个“.doc”扩展名或我可以用来转换 mime 类型的不同函数?

.dot 文件扩展名具有相同的 mime 类型,表示 word microsoft 模板。

所有 mime 类型都按字母顺序排序,您始终需要 return 排在第一位。像这样

Rack::Mime::MIME_TYPES.rassoc(mime_type).try(:first)

试试这个 gem,它将允许您从 HTML.

创建 word 文档

根据他们的文档,

对于htmltoword version >= 0.2 已经定义了action controller renderer,所以不需要声明mime-type,直接响应.docx格式即可。然后它将查找扩展名为 .docx.erb 的视图,这将提供将在 Word 文件中呈现的 HTML。

# On your controller.
respond_to :docx

# filename and word_template are optional. By default it will name the file as your action and use the default template provided by the gem. The use of the .docx in the filename and word_template is optional.
def my_action
  # ...
  respond_with(@object, filename: 'my_file.docx', word_template: 'my_template.docx')
  # Alternatively, if you don't want to create the .docx.erb template you could
  respond_with(@object, content: '<html><body>some html</body></html>', filename: 'my_file.docx')
end

def my_action2
  # ...
  respond_to do |format|
    format.docx do
      render docx: 'my_view', filename: 'my_file.docx'
      # Alternatively, if you don't want to create the .docx.erb template you could
      render docx: 'my_file.docx', content: '<html><body>some html</body></html>'
    end
  end
end