使用EC2进行PDF生成,为用户提供公共URL

时间:2017-04-19 13:57:00

标签: laravel laravel-5

我开发了一个允许用户选择多个“交易”的应用程序;每个都与PDF文件直接相关。

当用户多次选择并“打印”它们时,这些PDF文件将合并为一个较长的文件,以便于打印。

目前,“交易”PDF是根据要求生成的,PDF合并也是如此。

我正试图通过亚马逊基础设施进行扩展,但是我遇到了一些问题。

  1. 我应该为每个“交易”实现PDF生成的队列吗?如果是这样,我该如何为用户提供无缝体验?我们不希望他们“等待”
  2. 我可以使用EC2为我生成这些PDF文件吗?如果是这样,我是否可以提供“公共”链接,供用户直接从亚马逊下载文件,而不是使用我们的资源。
  3. 非常感谢!

    编辑----更多详情

    1. 用户通过常规表格输入一些信息
    2. 系统使用提供的文档信息
    3. 为每个请求生成PDF
    4. 系统生成的PDF保留在Amazon S3下
    5. 我们提供一个API,允许您一次“打印”多个pdf,为此,我们将S3中选定的PDF文件合并为一个文件以便于打印
    6. 当您打印多个文档时,会打开一个新窗口,它是您直接合并的文件,用户需要等待大约20秒才能显示。
    7. 我们可以利用用于在亚马逊基础设施上生成PDF的资源,但我们需要保持相同的流量,这意味着,我们应该提供一个即时的公共链接给用户下载&打印文件。

1 个答案:

答案 0 :(得分:1)

根据您的理解,我认为您只需要在用户请求文件后立即创建链接。但是,您希望并行创建PDF合并。我有理由根据我的理解做到这一点,也许它可以适用于你的情况。

首先从一些逻辑开始创建唯一的pdf文件名,随机字符串表示文件名。同时在后台生成PDF,但PDF的名称应与您在第一步中创建的相同。这将为用户提供即时下载文件名和链接。但是,您的文件创建仍在进行中。

如果使用Node.JS同时运行这两个步骤,请确保使用PHP或事件循环时使用线程。这样可以避免因找不到文件而导致404错误。

将文件从EC2传输到S3也会增加延迟延迟。但是如果你想保留文件供以后使用或将来多次使用,那么S3是个好主意,因为它可以简单地提供PDF文件以便更快地交付。我们知道S3用于静态媒体存储。否则只需计算所有内容并在EC2上生成文件