以ZIP格式存档大量PDF文件

时间:2019-04-02 16:25:29

标签: ruby-on-rails pdf zip archive

我有一个Ruby on Rails 5.1应用程序,在其中生成代表数据库记录的PDF文件。

我需要存档这些PDF文件,以便它们可以存储在应用程序外部。

这主要是一次性事件,因此我不需要持续同步。

我有工作代码,可以将每个记录转换为PDF文件,将该文件添加到内存中内置的ZIP文件中,然后将该ZIP作为下载返回给用户。

这可行,但是如果您有很多记录记录,Web服务器将超时,因此我需要找出一种不会占用所有服务器内存的更好方法。

ZIP文件的大小可能为200MB,其中包含10,000+个PDF文件。

我将应用程序托管在它们自己的容器上,因此如有必要,我可以访问服务器文件目录,但是每次重新部署或关闭容器都会擦除该文件。

我正在考虑的实现方法是:

  1. 在后台处理器中运行存档,完成下载链接后,该存档会向用户发送电子邮件。
  2. 每100条左右的记录将记录分成一个单独的ZIP(以避免内存问题和单个文件太大)。
  3. 将ZIP文件存储在容器目录中24小时,并允许用户通过电子邮件链接下载档案(每个ZIP文件都有一个单独的链接)。
  4. 24小时后在容器上擦拭tmp ZIP文件。

这是我第一次做这样的大型活动。这种方法合理吗?有什么更好的方法可以实现将PDF文件归档到服务器之外的目标?

1 个答案:

答案 0 :(得分:0)

您的方法是合理的。一些说明:

  1. 每个文件100条记录,每个查询预期10000条记录,这意味着用户将不得不手动下载和处理100个文件,这不是非常友好。我会考虑生产大文件而不是内存或流。知道所有文件大小后,您可以使用nginx mod_zip即时创建非压缩的zip文件(如果导出中的记录可以在多个不同的导出中发生,这可能会很有用)。
  2. 取决于此操作花费的时间-可能需要在创建过程中提供某种进度,以便用户在认为第一个导出不起作用时不会启动其他几个导出。
  3. 导出应在应用部署/重新启动后仍然存在,并且是幂等的