在我的 Rails 应用程序中,客户端通过 API 以 block (100 kB - 5 MB)的形式上传文件。 (它在 API 上重复使用相同的 HTTP POST 请求上传每个 block )。
在服务器端,我通过从上传移动临时文件将第一个上传的文件存储在特定目录中:
tmp = params[:file_pack].tempfile
path = '/xxx/xxx.txt'
FileUtils.move tmp.path, path
接下来,我想将其他 block (第二个、第三个等)附加到第一个 block 的末尾,这些 block 是通过 HTTP 发出的下一个请求。所以我想将所有 block 收集到一个文件中。
将一个文件附加到另一个大文件末尾的最有效方法是什么?
似乎最流行的方法是使用 File.open(path, "a")
,但这是最有效的方法吗?这是 File.open
将整个文件加载到内存中吗?
最佳答案
为了将一些文件附加到另一个文件的末尾,我使用了:
File.open(path, 'a') { |f| f << params[:file_pack].tempfile.read }
在哪里
path
是目标文件的路径a
表示指针在文件末尾(如果文件不存在,应该创建它)params[:file_pack]
是通过 HTTP 上传到 API 的文件.tempfile
允许访问临时上传的文件我已经通过将大小为 29B 的文件添加到大小为 279MB 的文件来测试它并且它运行得非常快。我没有做更详细的测试,但我希望这个总结对某人有用。
关于ruby-on-rails - rails 5 : Join 2 large text files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38714712/