File Can';无法在zf2中进行上传。文件始终无效?

File Can';无法在zf2中进行上传。文件始终无效?,file,validation,upload,frameworks,zend-framework2,File,Validation,Upload,Frameworks,Zend Framework2,我正在尝试创建一个控制器,为我上传一个文件,但我总是得到相同的结果。该文件无效,因此他无法上载 我的控制器中的功能是: $upload = new \Zend\File\Transfer\Transfer(); $upload->setDestination('./data/images/uploads/'); $rtn = array('success' => null); if ($this->getRequest()->isPost())

我正在尝试创建一个控制器,为我上传一个文件,但我总是得到相同的结果。该文件无效,因此他无法上载

我的控制器中的功能是:

$upload = new \Zend\File\Transfer\Transfer();
    $upload->setDestination('./data/images/uploads/');

    $rtn = array('success' => null);

    if ($this->getRequest()->isPost()) {
        $files = $upload->getFileInfo();
        foreach ($files as $file => $info) {
            if (!$upload->isUploaded($file)) {
                print "<h3>Not Uploaded</h3>";
                \Zend\Debug\Debug::dump($file);   
                continue;
            }
            if (!$upload->isValid($file)) {
                print "<h4>Not Valid</h4>";
                \Zend\Debug\Debug::dump($file);
                continue;
            }
        }

        $rtn['success'] = $upload->receive();
    }

    return new \Zend\View\Model\JsonModel($rtn);
正如您在中所看到的,使用
Zend\file\Transfer
上传文件已被弃用,取而代之的是使用标准ZF2
Zend\Form
Zend\InputFilter
功能

话虽如此,您应该使用
Zend\Filter\File\RenameUpload
移动上传的文件。您只需将
Zend\Filter\File\RenameUpload
过滤器附加到
InputFilter
规范,如下所示:

if ($this->request->isPost()) {
    $post = array_merge_recursive(
        $this->request->getPost()->toArray(),
        $this->request->getFiles()->toArray()
    );

    $form->setData($post);

    if ($form->isValid()) {
        // File uploaded and moved to data/uploads folder
    }
}
在控制器操作中:

请查看中的完整示例

Array
(
[files_0_] => Array
    (
        [name] => logo_welcome.gif
        [type] => image/gif
        [tmp_name] => /private/var/tmp/phpiufvIc
        [error] => 0
        [size] => 62935
        [options] => Array
            (
                [ignoreNoFile] => 
                [useByteString] => 1
                [magicFile] => 
                [detectInfos] => 1
            )

        [validated] => 
        [received] => 
        [filtered] => 
        [validators] => Array
            (
                [0] => Zend\Validator\File\Upload
            )

        [destination] => ./data/images/uploads
    )

)
$this->add([
    'name' => 'file',
    'type' => 'Zend\InputFilter\FileInput',
    'filters' => [
        [
            'name' => 'FileRenameUpload',
            'options' => [
                'target'               => realpath('./data/uploads/'),
                'randomize'            => true,
                'use_upload_extension' => true,
            ],
        ],
    ],
]);
if ($this->request->isPost()) {
    $post = array_merge_recursive(
        $this->request->getPost()->toArray(),
        $this->request->getFiles()->toArray()
    );

    $form->setData($post);

    if ($form->isValid()) {
        // File uploaded and moved to data/uploads folder
    }
}