Пытаясь использовать библиотеку файлов PyroCMS для загрузки нескольких файлов

Я публикую это на форуме PyroCMS, чтобы привлечь более широкую аудиторию за помощью, поскольку я просто не могу понять это.

Когда я пытаюсь загрузить несколько файлов с помощью библиотеки файлов PyroCMS, у меня возникают проблемы. Похоже, я могу получить файлы для загрузки по отдельности при вызове библиотеки, а также могу получить файлы для загрузки в обход библиотеки и тестирования с помощью move_uploaded_file. Я создал следующий (слегка урезанный) код в своем контроллере:

public function upload($id)
{
    // Folder selected or redirect
    $id or redirect('admin/mis/resources');

    // Run on validation
    if ($_FILES)
    {
        if (count($_FILES['userfile']['name'] > 0))
        {                
            foreach ($_FILES['userfile']['name'] as $file)
            {                    
                $upload = Files::upload($id, $file);
            }
        }                                  

        redirect('admin/vle/resources/contents/'.$id);            
    }

    $this->template->build('admin/resources/upload');
}

Однако при запуске этого кода файл не загружается. Если я вывожу загрузку, я получаю следующее сообщение:

Массив ( [статус] => [сообщение] =>

Вы не выбрали файл для загрузки.

Кажется, я не могу в жизни понять, как передать более одного файла в Files::upload. Я уверен, что что-то упускаю. Однако дело не в том, что я не могу получить файлы для загрузки в целом, потому что, если я изменю код на это локально для целей тестирования, мои файлы загружаются очень хорошо:

if($_FILES)
{
    if(count($_FILES['userfile']['name'])) 
    {
        foreach ($_FILES['userfile']['name'] as $file) 
        {
            $img = "c:/wamp/www/testupload/files/".$file;

            move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $img);
        }
    }   
}

Метод загрузки библиотеки файлов здесь https://github.com/pyrocms/pyrocms/blob/2.2/develop/system/cms/modules/files/libraries/Files.php#L333

Я пробовал много разных вещей до такой степени, что у меня немного кружится голова, пытаясь справиться с этим. Так что, если кто-то может помочь, это будет оценено.


person Mark    schedule 11.01.2013    source источник


Ответы (1)


Библиотека файлов в настоящее время не поддерживает несколько файлов, загруженных одним элементом. Таким образом, он пытается найти один файл из входного файла «userfile» вместо массива файлов.

Это должно работать:

<form method="post" action="/upload/1" enctype="multipart/form-data">
    <input name="userfile" type="file"/>
    <input name="secondfile" type="file"/>
</form

public function upload($folder_id)
{
    $upload = Files::upload($folder_id, 'Descriptive Name', 'userfile');
    $second_upload = Files::upload($folder_id, 'Some Name', 'secondfile');
}

Панель администратора PyroCMS загружает несколько файлов с помощью загрузчика jQuery BlueImp. Возможно, такое JS-решение подойдет вам? Таким образом, пользователи получают индикаторы выполнения, информирующие их о статусе каждой загрузки, и они могут видеть, когда каждая загрузка завершается.

person Jerel Unruh    schedule 13.01.2013
comment
Сейчас отсортировал с помощью BlueImp. Спасибо, что указали мне правильное направление, Джерел. - person Mark; 14.01.2013
comment
Это довольно грустно, и я боялся этого. :( Вы подтверждаете, что не можете использовать такое же имя : ? <input name="userfile[]" type="file" /> <input name="userfile[]" type="file" /> - person Tristan Jahier; 17.04.2014