Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 渲染文件的奇怪行为';s码_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 渲染文件的奇怪行为';s码

Ruby on rails 渲染文件的奇怪行为';s码,ruby-on-rails,ruby,Ruby On Rails,Ruby,在控制器中,我有如下内容: respond_to do |format| format.ini do response.headers['Content-Disposition'] = "attachment; filename=somefile.ini" render ini: SomeClass.make_ini(data) end end SomeClass.make_ini(数据)为API用户呈现正确的ini文件(1.5MB)。我们的客户要求添加内容长度标题。原

在控制器中,我有如下内容:

respond_to do |format|
  format.ini do
    response.headers['Content-Disposition'] = "attachment; filename=somefile.ini"
    render ini: SomeClass.make_ini(data)
  end
end
SomeClass.make_ini(数据)
为API用户呈现正确的ini文件(1.5MB)。我们的客户要求添加
内容长度
标题。原因不重要

当我尝试时:

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
file.size.to_s
带来
1301761
。设置
内容长度后,渲染文件为1.2MB。内容也被删减了


如果有人能告诉我原因,我将不胜感激。

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

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


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

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

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

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

如果使用curl,是否仍会得到相同的截断结果?通过curl在标头中设置的
内容长度是否也与您预期的一样?但是
size
是文件对象的方法,而不是字符串对象,因此它不应返回字符数,但不是字节数,不是吗?SomeClass.make_ini返回的是什么?我想说它返回的是一个以.ini格式呈现的字符串。因此,file变量它不是一个文件,而是一个包含返回的.ini文件内容的字符串。我想说,您需要向呈现函数发送一个字符串,而不是一个文件。@ArtyomKalmykov请告诉我们是什么SomeClass返回的对象的类。make_ini?根据返回的大小以及bytesize如何解决问题…我认为很明显这是一个字符串。是的,这是字符串。