4

我正在使用pluploaderLaravel,并且在我的管理上,它在创建新文章时的工作方式正在执行以下步骤:

  • 输入创建新文章所需的详细信息
  • 选择要为文章上传的照片
  • 单击按钮时Create,将执行以下操作:
    • 将每张照片的上传详细信息保存在会话数组中。这意味着如果要上传 3 个文件,则每个上传都有一个单独的 POST 操作
    • 将照片保存在该会话数组中后,它会在数据库中为文章创建记录
    • 它将id创建的文章发送到一个函数,该函数应该获取照片并将它们移动到他们的文件夹中,并将照片记录添加到数据库中

现在,问题是每个临时文件都会POSTtmp_filename删除,因此当它尝试实际移动照片时......没有照片可以移动。

我是对的,如果是这样,我该如何解决这个问题?在 X 函数结束之前保留 tmp 删除的任何方式?

4

2 回答 2

3

我对吗,

是的你是对的。PHP 在请求完成后删除上传的临时文件。PHP手册中也清楚地记录了这一点:

如果该文件未被移走或重命名,则该文件将在请求结束时从临时目录中删除。

您可以在此处找到该信息:POST 方法上传Docs

如果是这样,我该如何解决这个问题?

知道这一点确实表明如果您想保留该文件,您应该保留该文件的副本或重命名该文件。

在 X 函数结束之前保留 tmp 删除的任何方式?

写得很好,删除将在请求完成时启动。所以在 PHP 中,所有函数通常在请求完成之前执行,所以即使是 X 函数,如果你在同一个请求中调用它

如果不在同一个请求中调用,则需要引入会话管理并复制或重命名临时文件,然后才会自动删除。与 PHP 中应通过多个请求完成的任何其他操作一样,这很常见。请参阅会话文档

另见:

于 2012-12-31T17:20:04.357 回答
2

您可以做的最简单的事情就是在上传文件后将文件移动到其他地方。

但是,我建议您改为这样做:

  • 上传照片后,立即创建照片记录并将记录 ID 发送回浏览器。
  • 让浏览器插入一个输入字段,其中包含对照片 ID 的引用(例如,<input type="hidden" name="photos[]" value="1234">.
  • 保存文档表单后,将文档与这些照片 ID 相关联。

这样你甚至不需要会话。

于 2012-12-31T17:35:24.447 回答