Codeigniter Multi File Upload с HTML5, это можно сделать с помощью таких инструментов, как Uploadify? - PullRequest
1 голос
/ 25 января 2012

Можно ли сделать загрузчик нескольких файлов, используя только HTML5 и PHP? Я надеялся, что смогу выбрать несколько файлов, сохранить их в цикле, просто перебрать все файлы и загрузить их на сервер.

Но Codeigniter загружает только первый выбранный файл.

foreach ($_FILES as $key => $value)
{
      $this->upload->do_upload($key['name'])
}

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

Если невозможно использовать HTML5 и php, я просто буду использовать Uploadify или есть способ изменить класс загрузки для поддержки загрузки нескольких файлов?

Вот мой метод более или менее,

public function uploadScreens($id) {
$this->load->library('upload');
$config['allowed_types'] = '*';
$config['max_size'] = '45000';
$config['max_width'] = '20000';
    $config['max_height'] = '15000';
foreach ($_FILES as $key => $value)
    {
    if (!empty($key['name']))
            {
                $this->db->set('gameid', $id);
        $this->db->insert('gamescreens');
                $screenid = $this->db->insert_id();

                $this->createDirectory($screenid);
                $filename = $this->randomFilename();
                $config['file_name'] = "$filename";
                $config['upload_path'] = APPPATH . "../content/gamescreens/" . $screenid . '/';
                $this->upload->initialize($config);

                if ($this->upload->do_upload($key['name']))
                {
                    $data = $this->upload->data();
                    $sourceurl = $data["full_path"];
                    $this->db->simple_query("update gamescreens set source = '$sourceurl' Where id=$screenid");
        }
                else
                {
                    //catch eerrors
                }
            }
    }

}

Ответы [ 4 ]

1 голос
/ 12 февраля 2013

Насколько я знаю, вам не нужно обрабатывать несколько файлов с помощью CI при использовании uploadify.Поскольку uploadify будет загружать файлы (очередь загрузки) по одному, вызывая действие контроллера один раз для каждого файла.

Я использую это действие в своем контроллере загрузки для загрузки 10 файлов изображений

/**
 * Upload Action.
 */
public function upload()
{
    $targetFolder = '/uploads'; // Relative to the root

    if (!empty($_FILES)) {


        // Validate the file type
        $fileTypes = array('jpg','jpeg','gif','png'); // File extensions
        $fileParts = pathinfo($_FILES['Filedata']['name']);

        $tempFile = $_FILES['Filedata']['tmp_name'];
        $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
        $targetName = uniqid() . '.' . $fileParts['extension'];
        $targetFile = rtrim($targetPath,'/') . '/' . $targetName;

        if (in_array($fileParts['extension'],$fileTypes)) {
            move_uploaded_file($tempFile, $targetFile);
            echo $targetName;
        } else {
            echo 'Invalid file type.';
        }
    }
}

И это мой конфиг на стороне клиента для загрузки

// create file uploader
$('#file_upload').uploadify({
    'swf'      : '/swf/uploadify.swf',
    'uploader' : YOUR_CONTROLLER + '/upload',
    'uploadLimit' : 10,
    'onUploadSuccess' : function(file, data, response) {
        // do stuff where a file is uploaded
    },
    'onQueueComplete' : function(data) {
        // do stuff when queue done
    }
});

Надеюсь, это поможет.

0 голосов
/ 22 апреля 2013

Исходя из вашего примера кода, я вижу следующую проблему:

foreach ($_FILES as $key => $value)
{
      $this->upload->do_upload($key['name'])
}

Я считаю, что должно быть $value['name'], не правда?

0 голосов
/ 17 февраля 2013

Я не использую uplodify для загрузки нескольких файлов

, но я использую здесь

и редактирую небольшую информацию о мультизагрузочной библиотеке и получаю некоторые проблемы здесь

он может выгрузить несколько файлов, но я не знаю, что не так с «загрузкой данных файла» в результате, просто показано, «выгрузка файла данных из последнего загруженного файла»

я надеюсьэто поможет вам, если вы можете решить эту проблему, сообщите мне

0 голосов
/ 25 января 2012

Это распространенная проблема в CodeIgniter. Чтобы загрузить несколько файлов в CI, вам нужно вызвать $this->upload->initialize($config); в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...