如何上传多个文件?

时间:2011-01-02 14:36:25

标签: php

我正在尝试制作一个多图像上传器。使用jquery动态地在表单中添加文件上载字段。我尝试制作一个字段数组,因为我不想有一个隐藏的字段。所以我生成的上传字段看起来像

<input type="file" id="img0" name="img[]"/>
<input type="file" id="img1" name="img[]"/>
<input type="file" id="img2" name="img[]"/>
.....
..

在php方面,我做了类似

的事情
if(isset($_FILES['img']))
{
    foreach($_FILES['img'] as $k=>$v)
    {
        if($v!="")
        {
            uploadImage($k,0,0,0,"content/gallery/");
        }
    }
}

现在我知道我错了,因为在那段代码中我循环遍历'img'文件的属性而不是所有图像....但我不知道如何解决这个问题。

PS:uploadImage是我写的一个函数,它希望文件输入字段的名称作为第一个参数。

6 个答案:

答案 0 :(得分:1)

你很接近,但是$ _FILES的结构并不是非常直观,而且与人们的预期相反。要将上传文件的名称发送到您的函数,请执行以下操作:

if (isset($_FILES['img']))  {
    print_r($_FILES)  // Just to see the $_FILES array's structure (testing only)
    foreach ($_FILES['img']['name'] as $k => $v)  {        // 'name' is an array
        if ($v != '')  {                                   // Each value of $v is a file name
            uploadImage($v, 0, 0, 0, 'content/gallery/');  // Change $k in your code to $v
        }
    }
}

答案 1 :(得分:0)

$rtn = array();
foreach ($_FILES['img'] as $key=>$val)
{
  foreach ($val as $fkey=>$fval)
  {
    $rtn[$fkey][$key] = $fval;
  }
}
print_r($rtn);

答案 2 :(得分:0)

我可以建议一个更好的选择 -

jquery文件上传插件 演示网址 - http://blueimp.github.com/jQuery-File-Upload/ 源代码 - https://github.com/blueimp/jQuery-File-Upload

答案 3 :(得分:-1)

为什么不使用唯一的名称而只是循环遍历$ _FILES?我假设你没有发布任何其他文件......

否则,请尝试使用带有索引的常规for()循环,因为您正在迭代文件对象属性。另外,你将$ key传递给上传函数,而不是$ value,我猜这是一个明显的错误。

答案 4 :(得分:-1)

你不能做类似的事情:

$target_path = 'uploads/';

foreach($_FILES as $file) {
    $target_path = $target_path . basename( $file['name']); 

    if(move_uploaded_file($file['tmp_name'], $target_path)) {
        echo 'The file '.  basename( $file['name']). ' has been uploaded';
    } else{
         echo 'There was an error uploading the file, please try again!';
    }
}

只是为了确定:

不要忘记在表单中添加enctype =“multipart / form-data”。

答案 5 :(得分:-1)

最后我使用了隐藏的输入字段来传递正在上传的图片总数,并使用他们的名字上传它们

是的,我放弃了使用数组......这种数组方法比它的价值要多得多。