保持tmp上传文件

时间:2012-12-31 17:14:45

标签: php file-upload laravel plupload

我在Laravel中使用pluploader,在我的管理中,它在创建新文章时的工作方式正在执行以下步骤:

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

现在,问题在于每个POST tmp_filename,临时文件都会被删除,所以当它试图实际移动照片时...没有照片可以移动。

我是对的,如果是的话,我该如何解决这个问题呢?有什么方法可以保留tmp删除直到X函数结束?

2 个答案:

答案 0 :(得分:3)

  

我是对的,

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

  

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

您可以在此处找到相关信息:POST method uploadsDocs

  

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

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

  

任何保留tmp删除的方法,直到X函数结束?

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

如果不在相同的请求中调用它,则需要引入会话管理并复制或重命名tempfile,然后才能自动删除它。因为在PHP中的任何其他操作都应该通过多个请求来完成。请参阅SessionsDocs

参见:

答案 1 :(得分:2)

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

但是,我建议你这样做:

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

这样你甚至不需要会话。