【问题标题】:Keeping tmp uploaded file保存 tmp 上传的文件
【发布时间】:2012-12-15 18:29:24
【问题描述】:

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

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

现在的问题是,对于每个 POST,临时文件 tmp_filename 都会被删除,因此当它尝试实际移动照片时...没有要移动的照片。

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

【问题讨论】:

    标签: php file-upload laravel plupload


    【解决方案1】:

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

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

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

    这样你甚至不需要会话。

    【讨论】:

    • 是的,我决定将照片移动到临时目录,然后将其从那里移动到最终目的地
    【解决方案2】:

    我说的对吗,

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

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

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

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

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

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

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

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

    参见:

    【讨论】:

    • 是的,我将在另一个 tmp 目录上保留一份副本,然后从那里取出
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2015-11-07
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多