Rails send_file文件名utf-8在Internet Explorer中损坏

时间:2018-07-23 15:51:37

标签: ruby-on-rails

我使用以下代码在rails中发送文件:

  send_file(file_to_send,
    :x_sendfile  => true,
    :filename    => file_name,
    :type        => file_mime_type,
    :disposition => disposition,
    :stream   => true,
    :buffer_size => 4096)

其中file_name包含utf-8文件名,例如lörem ipsüm.docx。 在Firefox中,Chrome可以正常运行。在Internet Explorer甚至Edge中,特殊的德语字符(可能还有所有非默认字符)都被破坏了。

下载的文件名为Lörem ipsüm.docx

经过许多其他操作,我尝试使用:filename => URI.encode(file_name)导致IE和Edge中的文件名正确,但在Chrome和FF中却没有正确的文件名。在那里,我确实得到了编码的文件名Lo%CC%88rem%20ipsu%CC%88m.docx

所以有人知道如何解决此问题,使其在所有浏览器上都能正常工作吗?

1 个答案:

答案 0 :(得分:1)

可能有人遇到相同的问题,下面是解决方法:

  send_file(file_to_send,
    :filename => ERB::Util.url_encode(file_name),
    :x_sendfile  => true,
    :type        => file_mime_type,
    :disposition => "#{disposition}; filename*= UTF-8''#{ERB::Util.url_encode(file_name)}", # MSIE & MSEdge requirement to support non Latin filenames
    :stream   => true,
    :buffer_size => 4096)