【问题标题】:Multiple file upload identification多文件上传识别
【发布时间】:2015-10-24 14:41:35
【问题描述】:

我正在使用带有multiple 属性的文件上传输入。我的 $_FILES 的输出如下:

 [kadFile] => Array
        (
            [name] => Array
                (
                    [0] => Txt1.txt
                    [1] => Doc1.docx
                )

            [type] => Array
                (
                    [0] => text/plain
                    [1] => application/vnd.openxmlformats-officedocument.wordprocessingml.document
                )

            [tmp_name] => Array
                (
                    [0] => C:\wamp\tmp\phpE515.tmp
                    [1] => C:\wamp\tmp\phpE525.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 824
                    [1] => 768066
                )

        )

有没有办法通过javascript给它们一个特定的名称来识别这些文件,比如说或任何其他方式,以便它们将被POST-ED如下:

 [kadFile] => Array
            (
                [name] => Array
                    (
                        ["kadFile_txt1"] => Txt1.txt
                        ["kadFile_doc1"] => Doc1.docx
                    ) ...

我需要通过在选择文件时创建动态输入字段将特定属性传递给每个文件,这些字段具有命名约定(文件输入名称 +所选文件名称 +特定字段标识符)。在服务器级别,我需要保存每个文件并一次性添加这些额外的属性。

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以根据需要创建关联数组,只要您保留设置即可。然后将$new 替换为$_FILES 数组,如下所示:

    foreach($_FILES['kadFile']['name'] as $key => $value) {
            // This is not the greatest of regex, but works for your example
            preg_match('/([^\.]+).([0-9a-zA-Z]{3})/',$value,$exp);
            $nKey   =   $exp[1];
            $new['kadFile']['name']["kadFile_".$nKey]       =   $value;
            $new['kadFile']['tmp_name']["kadFile_".$nKey]   =   $_FILES['kadFile']['tmp_name'][$key];
            $new['kadFile']['error']["kadFile_".$nKey]      =   $_FILES['kadFile']['error'][$key];
            $new['kadFile']['size']["kadFile_".$nKey]       =   $_FILES['kadFile']['size'][$key];
    
        }
    
    echo print_r($new);
    

    【讨论】:

    • 似乎很合理,通过一些操作我可以实现我想要的。我敢打赌这是唯一的方法。谢谢
    • 是的,我一直这样做,但我像@Abijeet Patro 的链接一样进行分组。它只是更具可读性。
    【解决方案2】:

    AFAIK,您无法通过 JavaScript 更改上传的文件名。您是否考虑过使用单独的文件控件?

    或者在 JavaScript 上,我猜你可以在文件控件的 change 事件中添加隐藏字段。

    我会创建名称为hdn_"fileName" 的隐藏字段,值是您想要保留的任何值。

    然后,当您开始循环遍历 $_FILES 中的文件时,您可以从 $_POST 访问这些隐藏字段值(基于当前文件名)并做任何您想做的事情。

    【讨论】:

    • 好吧,我目前可以使用文件的索引来执行此操作,例如 kadFile_0_myField,这很好,但我想知道是否可以在 @ 中操纵键成为关联而不是数字987654326@数组
    • 感谢老兄的帮助
    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2014-03-19
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多