我使用以下代码在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
。
所以有人知道如何解决此问题,使其在所有浏览器上都能正常工作吗?
答案 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)