2

我正在尝试使用 Zend Form 进行文件上传,但我无法让文件上传工作。

这是我的表单代码:

public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('modelupload');
        $this->setMethod('post');
        $this->setAction('/model/upload');
        $this->setAttrib('enctype', 'multipart/form-data');

        // ... other elements ... //

        $file = new Zend_Form_Element_File('file');
        $file
            ->setAttrib('title', 'Select a file to upload.')
            ->setAttrib('required',"")
            ->setRequired(true)
            ->addValidator('Count',false,1)
            ->addValidator('Size',false,104857600)
            ->setMaxFileSize(104857600)
            ->setValueDisabled(true)
            ->setDestination(APPLICATION_PATH . "/../data/models/temp/")
            ->setLabel('Select a file to upload.');

        $submit = new Zend_Form_Element_Submit('submit', array(  
            'label' => 'Upload'  
        ));
        $submit->removeDecorator('DtDdWrapper');

        $this->setDecorators( array( array('ViewScript',
        array('viewScript' => 'formViews/_form_upload_model.phtml'))));

        $this->addElements(array($name, $description, $file, $submit));
    }

这是我的控制器代码:

public function uploadAction()
{
    // action body
    error_reporting(E_ALL);
    $this->view->pageTitle = "Model Upload";

    $form = new Application_Model_FormModelUpload();

    if ($this->_request->isPost()) {
        $formData = $this->_request->getPost();
        if ($form->isValid($formData)) {
            echo "<h1>Valid</h1>";

            $upload = new Zend_File_Transfer();
            $files  = $upload->getFileInfo();

            $form->getValues();

        } else {
            echo "<h1>Not Valid</h1>";
        }
        echo "<pre>";
        print_r($formData);
        echo "</pre>";
    }

    $this->view->form = $form;
}

然后当我尝试上传一些东西时,我得到了这个:

Not Valid
Array
(
    [name] => title
    [description] => description
    [MAX_FILE_SIZE] => 104857600
    [file] => filename.extension
    [submit] => Upload
)

即表单没有通过验证,我不知道为什么。除此之外,该文件没有被上传。我已经尝试了很多东西,现在我无能为力了。如果这有什么不同,我将在我的本地环境中使用 Zend 服务器 CE。

我提前感谢任何人提供的任何帮助!

编辑:

在下面尝试了 MIss poo 的代码并得到了这个:

Array
(
)
Array
(
    [name] => Array
        (
        )

    [description] => Array
        (
        )

    [file] => Array
        (
        )

    [submit] => Array
        (
        )

)
Array
(
)

绝对没有返回错误...

4

3 回答 3

2

我有同样的问题,当我setMaxFileSize(104857600)从表单中删除时出现错误 [fileUploadErrorIniSize] => File 'image' exceeds the defined ini size,所以我不得不更改我的 php.ini 配置并将其添加到我的表单enctype="multipart/form-data"中。

于 2014-07-08T12:54:21.890 回答
0

试试Zend_File_Transfr_Adapte_Http这是一个例子:

    if ($this->_request->isPost()) {

        $formData = $this->_request->getPost();
        if ($form->isValid($formData)) {
            echo "<h1>Valid</h1>";

            /* Uploading Document File on Server */
            $upload = new Zend_File_Transfer_Adapter_Http();
            $upload->setDestination(APPLICATION_PATH . "/../data/models/temp/");

            try {
                 // upload received file(s)
             $upload->receive();
            } catch (Zend_File_Transfer_Exception $e) {
             $e->getMessage();
            }

       } else {
            echo "<h1>Not Valid</h1>";
        }
        echo "<pre>";
        print_r($formData);
        echo "</pre>";
    }

    $this->view->form = $form;
}  

.

于 2013-05-03T22:36:49.380 回答
0

使用以下代码获取验证失败的位置。

if ($form->isValid($formData)) {
  //you code
} else {
   print_r($form->getMessages()); //error messages
   print_r($form->getErrors()); //error codes
   print_r($form->getErrorMessages()); //any custom error messages
}

这将跟踪您的验证将失败的位置,然后您可以轻松解决它。这至少可以让您更好地了解“为什么”。

于 2013-05-03T07:53:57.860 回答