上传多个文件,重命名并将最终名称推送到数组

时间:2014-04-21 11:27:55

标签: php arrays file-upload

我上传多个文件,问题是我无法合并文件结果。
让我们从表格开始,这是代码:

<form>
<input name="datas[{{$index}}][name]" type="text">
<input name="datas[{{$index}}][pics]" type="file">
</form>

这将输出,就像这样。

<form>
<input name="datas[0][name]" type="text">
<input name="datas[0][pics]" type="file">
<input name="datas[1][name]" type="text">
<input name="datas[1][pics]" type="file">
<input name="datas[2][name]" type="text">
<input name="datas[2][pics]" type="file">
</form>

尽可能多的用户需要,我使用angularJS重复输入...
这将输出一个数组,用于以json格式保存数据..在数据库中。

Array
(
    [0] => Array
        (
            [name] => Marco
        )

    [1] => Array
        (
            [name] => Polo
        )

    [2] => Array
        (
            [name] => John
        )

)

现在移动我的文件我用这个...

if(isset($_FILES['datas'])){
    foreach($_FILES['datas']['tmp_name'] as $key) {
        $file_tmp = $key['pics'];
        foreach($_FILES['datas']['name'] as $keys) {
            $file_name = $keys['pics'];
            move_uploaded_file($file_tmp, $f_imgs.rand().$file_name);
        }
    }
}

到目前为止,一切都是&#34;很好&#34;,我得到了文件,我得到了名字,但我可以保存信息就像那样,因为后者我必须检索它,它将是一个乱...
这个想法如下:
1.-如果文件名称,我需要用用户名重命名文件:
pictures_01.jpg我需要添加用户名,以便文件的名称为
name_pictures_01.jpg而不是33424_pictures_01.jpg,现在我使用rand()而不是time(),因为用户将同时上传5或10个文件,时间可能相同,因此它会覆盖文件名......

2.-一旦文件被移动并用用户名重命名,我需要在json_encode之前将该最终名称添加到数组中,因此最终数组将类似于:

Array
(
    [0] => Array
        (
            [name] => Marco
            [img] => Marco_picures_01.jpg
        )

    [1] => Array
        (
            [name] => Polo
            [img] => Polo_picures_01.jpg
        )

    [2] => Array
        (
            [name] => John
            [img] => John_picures_01.jpg
        )

)

)

现在用[img]键按下我使用此代码的值:

foreach ($arrDatas as $ki => $gc) {
    foreach($_FILES['datas']['name'] as $keys) {
        $file_name = $keys['pics'];
        $arrDatas[$ki]['img'] = $file_name;
    }
    }

但这不起作用,因为重命名文件和数组推送是分开的我无法知道名字是什么!...

感谢您抽出宝贵的时间......

0 个答案:

没有答案