【问题标题】:How to upload an array of files?如何上传文件数组?
【发布时间】:2017-01-19 07:53:01
【问题描述】:

我试图通过多次提交表单来构建一个文件数组,然后将这些文件移动到一个目录,但它不起作用。每次上传都会覆盖前一次,然后它甚至不会移动那个(upload_to_file() 函数不做任何事情)

HTML:

<form id="form" action="home.php" method="post" enctype="multipart/form-data">
        <input type="hidden" name="MAX_FILE_SIZE" value="8000000">
        <input class="upload_btn" type="file" name="images[]" id="image_file">
        <input type="submit" id="img_submit" class="form_button" name="submit_image" value="upload"/>
</form>

重要的是只有一个上传按钮可用于上传多个文件。

我需要将它们存储在一个数组中,这样我就可以在任何地方循环显示它们的 ['name']。for ($i = 0; $i &lt; count($_FILES['images']['name']); $i++){}

然后,一旦提交了另一个表单,它就会调用一个函数将数组中的每个文件移动到一个目录中。

包含的 php 文件中的函数:

function upload_to_file(){
$image_paths = array();
$target_dir = "uploads/images/";
$path = $target_dir . basename($_FILES['images']['name'][0]);

if(isset($_FILES['images']['name'][0]) && $_FILES['images']['size'][0] > 0)
{
    if (move_uploaded_file($_FILES['images']['tmp_name'][0], $path)) {
        $image_paths[0] = "uploads/images/";
    }
}
return $image_paths;

}

我只是用数组中的第一个元素来测试它,但以后需要做一个循环。

【问题讨论】:

  • 这些上传作为单独的请求发送,php 不知道多个请求是更大的一部分。因此,要么您必须使用“会话”进行持久性,并从会话中收集跨越 所有 请求的信息,,更灵活,您需要在客户端上实现它侧,以便创建文件索引之类的内容并在客户端显示。这就是所谓的“上传管理器”。
  • 我尝试使用类似 array_push($_SESSION['images'], $_FILES['image_file']);效果很好,直到 move_uploaded_file($_SESSION['images'][0]["tmp_name"], $path) 部分。即使我输出 $_SESSION['images'][0]["tmp_name"] 它仍然存在。
  • 所以你是说你用一个表单上传文件并用另一个表单组织它们,但你不将它们存储在数据库中(路径等)?
  • move_uploaded_file() 仅在请求处理本身期间起作用。所以当一个文件被上传时,不管你手动保存到会话变量中的什么。因此,要么完全处理每个上传的文件,要么,如果确实需要,将其移动到您手动处理的临时位置。不过,这将需要清理。不是一个好的架构。
  • 好的,我尝试在提交表单后一个一个地移动文件,并且至少 move_uploaded_file() 有效。我不想这样做,因为现在如果我只想作为提交的文件删除它必须去删除它,而不是仅仅从数组中删除它。

标签: php arrays file file-upload image-upload


【解决方案1】:

这是帮助您上传多个文件的程序。代码中的“sub”是提交按钮的名称。 “upload”是文件控制器的名称,上传的文件存储在您必须在根文件夹上创建的名为“img”的目录中。

<?php

if (isset($_POST['sub'])) {
    if (count($_FILES['upload']['name']) > 0) {
     for ($i=0; $i<count($_FILES['upload']['name']); $i++) {
      $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
      if ($tmpFilePath != "") {
        $shortname = $_FILES['upload']['name'][$i];
        $filePath = "img/" . date('d-m-Y-H-i-s').'-'.$_FILES['upload']['name'][$i];
        if (move_uploaded_file($tmpFilePath, $filePath)) {
          $files[] = $shortname;                    
        }
      }
    }
  }
  echo "<h1>Uploaded:</h1>";    
  if(is_array($files)){
    echo "<ul>";
    foreach($files as $file){
      echo "<li>$file</li>";
    }
    echo "</ul>";
  }
}
?>

给出HTML代码

<form action="" enctype="multipart/form-data" method="post">
    <input id='upload' name="upload[]" type="file" multiple="multiple" />
    <input type="submit" name="sub" value="Upload Now">
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多