如何使用Zend框架上传多个文件?

时间:2013-04-28 21:58:18

标签: php zend-framework file-upload upload zend-file

即使我选择了2张或更多图像,也只会上传一张。

我有一个简单的表格:

<form action="/images/thumbs" method="post" enctype="multipart/form-data">
    <input name="file[]" id="file" type="file" multiple="" />
    <input type="submit" name="upload_images" value="Upload Images">
</form>

然后在我的控制器中:

public function thumbsAction()
{
    $request = $this->getRequest();

    if ($request->isPost()) {
        if (isset($_POST['upload_images'])) {
            $names = $_FILES['file']['name'];

            // the names will be an array of names
            foreach($names as $name){
                $path = APPLICATION_PATH.'/../public/img/'.$name;
                echo $path; // will return all the paths of all the images that i selected
                $uploaded = Application_Model_Functions::upload($path);
                echo $uploaded; // will return true as many times as i select pictures, though only one file gets uploaded
            }
        }
    }
}

upload方法:

public static function upload($path)
{
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addFilter('Rename', array(
        'target'    => $path,
        'overwrite' => true
    ));

    try {
        $upload->receive();
        return true;
    } catch (Zend_File_Transfer_Exception $e) {
        echo $e->message();
    }
}

为什么我只上传了一个文件?

1 个答案:

答案 0 :(得分:9)

Zend_File_Transfer_Adapter_Http实际上有关于文件上传的信息。您只需要使用该资源进行迭代:

$upload = new Zend_File_Transfer_Adapter_Http();
$files  = $upload->getFileInfo();
foreach($files as $file => $fileInfo) {
    if ($upload->isUploaded($file)) {
        if ($upload->isValid($file)) {
            if ($upload->receive($file)) {
                $info = $upload->getFileInfo($file);
                $tmp  = $info[$file]['tmp_name'];
                // here $tmp is the location of the uploaded file on the server
                // var_dump($info); to see all the fields you can use
            }
         }
     }
}