2013-01-21 69 views
0

我使用Zend Framework 1.12進行某些文件上傳系統。在表單中使用Zend_File_Transfer_Adapter_Http,用於上傳兩個文件。 這兩個文件有兩個表單元素。Zend文件多次上傳,可訪問單獨的文件名

$file1 = new Zend_Form_Element_File('file1'); 
// other options like setLabel etc. 
$this->addElement($file1, 'file1'); 

$file2 = new Zend_Form_Element_File('file2'); 
// other options like setLabel etc. 
$this->addElement($file2, 'file2'); 

和我處理上傳過程在我的控制器是這樣的:

if ($request->isPost()) { 
        if ($form->isValid($request->getPost())) { 

         $adapter = new Zend_File_Transfer_Adapter_Http(); 
         $adapter->setDestination($dirname); 
         $files = $adapter->getFileInfo(); 

         foreach ($files as $file => $fileInfo) { 


          if (!$adapter->receive($file)) { 
           $messages = $adapter->getMessages(); 
           echo implode("\n", $messages); 
          } else { 
           $location = $adapter->getFileName($file, true); 
           $filename = $adapter->getFileName($file, false); 


           // taking location and file names to save in database.. 
          } 
         } 
        } 

有了這些,我可以管理的兩個文件上傳。但我不知道如何獲取與特定的Zend_Form_Element_File一起上傳的文件的位置。例如,我需要知道哪個文件上傳到$ file1(表單中的元素),我將它的位置保存到數據庫中的一個表中,並將哪個文件上傳到$ file2並將其位置保存到另一個表中。

回答

1

我不喜歡使用Zend_File_Transfer_Adapter_Http。 我更喜歡使用這樣的代碼:

在的application.ini:

data_tmp = APPLICATION_PATH "/../data/tmp" 

在自舉:

$options = $this->getOptions(); 
define('DATA_TMP', $options['data_tmp']); 

在形式:在控制器

$elementFoo = new Zend_Form_Element_File('foo'); 
$elementFoo->setLabel('Upload File 1:')->setDestination(DATA_TMP); 

$elementBar = new Zend_Form_Element_File('bar'); 
$elementBar->setLabel('Upload File 2:')->setDestination(DATA_TMP); 

if ($request->isPost()) { 
    if ($form->isValid($request->getPost())) { 
     $values = $form->getValues(); 
     $filenameFoo = $values['foo']; 
     $filenameBar = $values['bar']; 
     //at this point you know the name of the individual filename 
     $filePathFoo = DATA_TMP . DIRECTORY_SEPARATOR . $filenameFoo; 
     $filePathBar = DATA_TMP . DIRECTORY_SEPARATOR . $filenameBar; 
     //now you have even the physical path of the files 

     // taking location and file names to save in database.. 
    } 
} 

我的2分。