关于渲染文件大小的奇怪行为

时间:2016-04-24 10:49:33

标签: ruby-on-rails ruby

在控制器中,我有类似的东西:

Content-Length

respond_to do |format| format.ini do file = SomeClass.make_ini(data) response.headers['Content-Length'] = file.size.to_s response.headers['Content-Disposition'] = "attachment; filename=somefile.ini" render ini: file end end 为API用户呈现正确的ini文件(1.5MB)。我们的客户有一项任务是添加file.size.to_s标题。原因并不重要。

当我尝试:

1301761

Content-Length带来npm link。设置node --harmony后,渲染文件为1.2MB。内容被削减。

如果有人能说出原因,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

您的文件中的字符似乎需要存储多于1个字节。您应该使用bytesize方法而不是size。

您可以使用size而不是bytesize here找到问题的示例。 size返回字符数,但是您需要字节数返回的字节数。

UTF-8使用1到4个字节来存储字符。

答案 1 :(得分:2)

假设SomeClass.make_ini返回Ruby的File类实例,其size方法应该返回字节数,而不是字符数:

 :001 > File.write('japanese.txt', "ルビー")
 => 9
 :002 > file = File.new('japanese.txt')
 => #<File:japanese.txt>
 :003 > file.size
 => 9

是否必须在响应标头中设置内容类型?

相关问题