Используя CakePHP для создания загрузки файла, все записи массива $ file возвращают один первый символ имени файла - PullRequest
0 голосов
/ 13 января 2011

Используя следующий код в моем файле просмотра (add.ctp):

<div class="resources form">
<?php echo $this->Form->create('Resource');?>
    <fieldset>
        <legend><?php __('Add Resource'); ?></legend>
    <?php
        echo $this->Form->input('title');
        echo $this->Form->input('file', array('type' => 'file'));
        ...
    ?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
</div>
...

... и следующий код в контроллере ...

function add() {
    if (!empty($this->data)) {
        $this->Resource->create();
        if ($this->uploadFile() && $this->Resource->save($this->data)) {
            $this->Session->setFlash(__('The resource has been saved', true));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The resource could not be saved. Please, try again.', true));
        }
    }
    ....
}

...с помощью следующей функции для проверки процесса:

function uploadFile() {
        $file=$this->data['Resource']['file'];
        $this->data['Resource']['filename'] = 'failing with name:'.$file['name'].'/ file_mime: '.$file['filemime'];
    return true;
}

База данных всегда заполняется первым символом исходного имени файла, независимо от того, какой файл я пытаюсь загрузить или какие элементы массива $ fileЯ пытаюсь получить доступ.Например, с test.gif я получаю:

"ошибка с именем: t / file_mime: t"

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

filename / varchar (200) / utf8_general_ci / NOT NULL

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

1 Ответ

0 голосов
/ 14 января 2011

Мне удалось заполучить одного из участников CakePHP, который очень, очень любезно предложил свою помощь и решил для меня проблему, я очень благодарен, но оставлю его анонимным!Я вижу, что вашему add.ctp нужен массив при создании формы:

echo $this->Form->create('Resource', array('type' => 'file'));

Это говорит помощнику формы CakePHP о создании типа формы из нескольких частей, готового для отправки файлов.

...