我正在尝试制作一个多图像上传器。使用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
是我写的一个函数,它希望文件输入字段的名称作为第一个参数。
答案 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)
最后我使用了隐藏的输入字段来传递正在上传的图片总数,并使用他们的名字上传它们
是的,我放弃了使用数组......这种数组方法比它的价值要多得多。