2015-10-24 6 views
1

Я использую вход для загрузки файлов с атрибутом 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 
        ) ... 

Мне нужно передать определенные свойства каждого файла путем создания динамических полей ввода при выборе файлов, эти поля имеют именовании, (имя входного файла + имя выбранного файла + конкретный идентификатор поля). На уровне сервера мне нужно сохранить каждый файл и добавить эти дополнительные свойства одним выстрелом.

ответ

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); 
+0

Кажется разумным, с некоторыми манипуляциями я могу добиться того, чего хочу. Держу пари, это единственный способ. Спасибо – KAD

+0

Да, я делаю это все время, но я делаю группировку, как ссылку @Abijeet Patro. Это просто читаемо. – Rasclatt

1

AFAIK, вы не можете изменить имена загруженных файлов с помощью JavaScript. Думали ли вы об использовании отдельных элементов управления файлами?

ИЛИ на JavaScript, я думаю, вы можете добавить скрытые поля на изменение событие контроля файла.

Я бы создал скрытые поля с именем hdn_"fileName" и значение, которое вы хотите сохранить.

Затем, когда вы начинаете перебирать файлы в $_FILES, вы можете получить доступ к этим скрытым значениям полей (на основе текущего имени файла) из $_POST и делать все, что хотите.

+0

Ну что я могу сделать это в настоящее время с индексом файла, такие как 'kadFile_0_myField', что это хорошо, но я, если смогу интересно манипулировать ключами, чтобы стать ассоциативным, а не числовым в массиве '$ _FILES' – KAD

+0

Я не уверен, что вы можете - http://php.net/manual/en/features.file-upload.post-method.php# 91479 –

+0

Спасибо, чувак за помощь – KAD