在控制器中,我有类似的东西:
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。内容被削减。
如果有人能说出原因,我将不胜感激。
答案 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
是否必须在响应标头中设置内容类型?