2011-12-29 77 views
0

我想在Zend框架中上傳文件。我在表格下面的代碼:在Zend Framework中Zend_Form_Element_File的setDestination方法中給出的路徑

$this->addElementPrefixPath('App', 'App/'); 
      $this->setName('upload'); 
    $this->setAttrib('enctype', 'multipart/form-data'); 

    $description = new Zend_Form_Element_Text('description'); 
    $description->setLabel('Description') 
      ->setRequired(true) 
      ->addValidator('NotEmpty'); 
    $file = new Zend_Form_Element_File('file'); 
    $path="/images"; 
    $file->setDestination($path) 
      ->setLabel('File') 
      ->setRequired(true) 
      ->addValidator('NotEmpty'); 

    $submit = new Zend_Form_Element_Submit('submit'); 

    $submit->setLabel('Upload'); 

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

我使用NetBeans和我有公共文件夾下的圖片的文件夾。我想,所有的文件都上傳到圖片文件夾,但是當我運行該項目也給出了錯誤的

給定的目標不是一個目錄或者不存在

如果我給的完整路徑C:\Users\398853\Documents\NetBeansProjects\ZendWithFileUpload\public\images則運行良好,文件上傳到圖像文件夾。但是當我給$path='/images'它說上面的錯誤'爲什麼?應該給出什麼路徑?謝謝。

回答

4

在SetDestination應設置好的絕對路徑desitnation文件夾(在/ var/WWW/...或c:/ web服務器/ ...的情況下你贏了用戶)。

但是,最好的做法是使用函數getcwd()或實際路徑(dirname(FILE))獲取絕對路徑。

所以,首先你應該在index.php文件(通常位於公共文件夾)中定義常量(例如名稱爲PUBLIC_PATH)。

defined('PUBLIC_PATH') 
|| define('PUBLIC_PATH', realpath(dirname(__FILE__))); 

這樣,您就可以使用可變PUBLIC_PATH而不是筆下的字符串「/無功/網絡/ ...」作爲前綴爲您的真實路徑上傳文件夾中。

所以,如果你的「圖片」文件夾位於「公共」文件夾,你應該這樣用戶建設:

$file->setDestination(PUBLIC_PATH . '/images'); 

此代碼也將上傳項目工作後,從本地主機到網絡服務器。

0

在您的引導代碼中,您需要設置應用程序的根文件夾。

無論何時您想要獲取應用程序文件夾中的子文件夾路徑(例如,您的方案中的圖像),都需要使用此變量並追加文件夾名稱。

如果你的引導代碼是在其中公共根文件夾下的應用程序文件夾,

Zend_Registry::set('APP_ROOT', dirname(dirname(__FILE__))); 

在應用程序的其他地方,當你想獲得一個文件夾路徑,比如你想要得到的圖像文件夾路徑公共文件夾下,ü需要使用,

Zend_Registry::get('APP_ROOT') . "/images"; 
1

附加配置到module.config.php

return array (
    .... 
    //other settings 
    'module_config' => array(
     'upload_location' => __DIR__.'/../../../data/uploads' 
    ) 
); 

添加控制器

public function getFileUploadLocation() { 
    $config = $this->getServiceLocator()->get('config'); 
    return $config['module_config']['upload_location']; 
} 

並使用 ....

$uploadPath = $this->getFileUploadLocation(); 
$adapter->setDestination($uploadPath); 

....

相關問題