Rails 5:加入2个大文本文件

时间:2016-08-02 07:51:43

标签: ruby-on-rails linux

在我的Rails应用程序中,客户端通过API上传文件(100 kB - 5 MB)。 (它在API上重复使用相同的HTTP POST请求上传每个块)。

在服务器端,我将第一个上传的文件存储在特定目录中,方法是从上传中移动tempfile:

 tmp = params[:file_pack].tempfile
 path = '/xxx/xxx.txt'

 FileUtils.move tmp.path, path

接下来,我想追加其他块(第二个,第三个等) - 通过HTTP进入下一个请求 - 到第一个块的末尾。所以我想在一个文件中收集所有块。

将一个文件追加到另一个大文件末尾的最有效方法是什么?

似乎最流行的方式是使用File.open(path, "a"),但它是最有效的方式吗?这个File.open是否将整个文件加载到内存中?

1 个答案:

答案 0 :(得分:1)

要将某个文件附加到另一个文件的末尾,我使用了:

File.open(path, 'a') { |f| f << params[:file_pack].tempfile.read }

,其中

  • path是目标文件的路径
  • a表示指针位于文件末尾(如果文件不存在,则应该创建它)
  • params[:file_pack]是通过HTTP上传到API的文件
  • .tempfile可以访问临时上传的文件

    我通过将大小为29B的文件添加到文件大小为279MB来测试它,它的工作速度非常快。我没有做过更详细的测试,但我希望这个摘要对某些人有用。