2011-03-08 13 views
5

मैं ज़ेंड फॉर्म का उपयोग करता हूं और फ़ाइल अपलोड करता हूं। मुझे इसके लिए नाम बदलने और उपयोगकर्ता को जोड़ने की आवश्यकता है। लेकिन अगर मैं कोड में फ़ाइल के विस्तार को प्राप्त करने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है "बहुत अधिक फाइलें, अधिकतम '1' की अनुमति है लेकिन '2' दिया जाता है"। अगर मैं $ _FILES का उपयोग करके एक्सटेंशन प्राप्त करने का प्रयास करता हूं तो ऐसा लगता है कि यह काम कर सकता है लेकिन यह बदसूरत लगता है। क्या आप कृपया मुझे बता सकते हैं कि फ़ाइल को अपने एक्सटेंशन को सहेजने का नाम बदलने का तरीका कैसे बदला जाए?फ़ाइल बचत एक्सटेंशन का नाम बदलने के लिए Zend_Form_Element_File

 $form = new Form_ImportSubscribers();    
     if ($this->getRequest()->isPost()) { 
      $formData = $this->getRequest()->getPost(); 
      if ($form->isValid($formData)) { 
       //it looks like it works but it's ugly solution 
//    $extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); 
       //causes an error "Too much files, maximum '1' are allowed but '2' are given"   
       $extension = pathinfo($form->file->getFileName(), PATHINFO_EXTENSION);    
       $form->file->addFilter('Rename', $accountId . '_' . time() . '.' . $extension); 

       if (!$form->file->receive()) { 
        $this->view->form = $form; 
        $this->view->listName = $list->list_name;         
        return; 
       }  
+0

क्या आप बता सकते हैं कि कोड की कौन सी पंक्ति ने उस त्रुटि को फेंक दिया? – emaillenin

+0

यदि मैं इस पंक्ति का उपयोग करता हूं, तो जब मैं फ़ाइल अपलोड करने का प्रयास करता हूं तो सत्यापनकर्ता मान्य होने में विफल रहता है। – Oleg

+0

मुझे इसी तरह की समस्याओं के समान लिंक मिला है http://framework.zend.com/issues/browse/ZF-7851?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel। – Oleg

उत्तर

14

मुझे लगता है कि आप एक से अधिक फ़ाइलों $ फार्म अगर> फ़ाइल> getFileName() देता है एक से अधिक मूल्य अपलोड करें। इस मामले में आप का नाम बदलें फिल्टर लागू करते हैं और इस प्रकार अलग-अलग फ़ाइलों प्राप्त कर सकता है:

/*@var $adapter Zend_File_Transfer_Adapter_Http */ 
$adapter = $form->file->getTransferAdapter(); 
$receivingOK = true; 
foreach ($adapter->getFileInfo() as $file => $info) {          
    $extension = pathinfo($info['name'], PATHINFO_EXTENSION); 
    $adapter->addFilter('Rename', $accountId . '_' . time() . '.' . $extension, $file); 
    if (!$adapter->receive($file)) { 
     $receivingOK = false; 
    } 
} 

if (!$receivingOK) { 
    $this->view->form = $form; 
    $this->view->listName = $list->list_name;         
    return; 
} 

यह भी भले ही आप एकाधिक फ़ाइलों को अपलोड प्रदर्शन नहीं करते काम करना चाहिए।

+0

मैं mutliple अपलोड का उपयोग नहीं करता, यही कारण है कि मुझे यह त्रुटि अजीब लगता है। – Oleg

+0

$ form-> file-> getFileName() केवल एक फ़ाइल देता है, लेकिन ज़ेंड फॉर्म सत्यापन त्रुटि के साथ विफल रहता है: "बहुत अधिक फ़ाइलें, अधिकतम '1' की अनुमति है लेकिन '2' दिए गए हैं" – Oleg

+0

ऐसा लगता है कि यह वैधकर्ता $ तत्व -> addValidator ('गणना', झूठी, 1); फॉर्म विफल रहता है, लेकिन यह अजीब है क्योंकि मुझे कई फाइलें नहीं मिलती हैं। – Oleg

1

की तर्ज पर कुछ उपयोग करके देखें:

$upload = new Zend_File_Transfer(); 
// use setDestination, addValidator etc 
$files = $upload->getFileInfo(); 
foreach ($files as $file => $info) { 
    $file = '/path/to/file/name.ext'; 
    $upload->addFilter('Rename', $file); 
    //Do rest of code 
} 
$upload->receive(); 
+0

माफ़ी, मैं अब समझ में नहीं आता कि इसे Zend_Form के साथ कैसे एकीकृत किया जाए। – Oleg

2

यह एक नियंत्रक में मेरी कोड है, यह Zend 1.11 में काम करता है:

$uploadForm = new Application_Form_DeckblattUpload(); 
$front = $uploadForm->getElement('front'); 
/* @var $front Zend_Form_Element_File */ 
$tfa = $front->getTransferAdapter(); 
/* @var $tfa Zend_File_Transfer_Adapter_Abstract */ 
$tfa->addFilter('Rename', array(
    'target' => APPLICATION_PATH .'/public/dir/somepath.jpg', 
    'overwrite' => true)); 

$back = $uploadForm->getElement('back'); 
/* @var $front Zend_Form_Element_File */ 
$tfa = $back->getTransferAdapter(); 
/* @var $tfa Zend_File_Transfer_Adapter_Abstract */ 
$tfa->addFilter('Rename', array(
    'target' => APPLICATION_PATH . '/public/someOtherDir/somepath.jpg', 
    'overwrite' => true)); 

if ($this->getRequest()->upload) { 
    if ($uploadForm->isValid($this->getRequest()->getParams())) { 
     $uploadForm->getValues(); //<- this does the uploading 
     //Success-Message 
    } 
    else { 
     //Failure-Message 
    } 
} 
$this->view->uploadForm = $uploadForm; 

प्रपत्र सिर्फ 2 Zend_Form_Elements_Files ('वापस' और 'सामने) और सबमिट बटन (' अपलोड ') शामिल हैं।

मुझे आशा है कि यह आपको एक विचार देता है कि उपयोगकर्ता का नाम बदलने का तरीका कैसे है और अभी भी $ form-> isValid() का उपयोग करें। http://framework.zend.com/manual/en/zend.file.transfer.filters.html और http://framework.zend.com/manual/en/zend.filter.input.html

भी ध्यान रखें, कि आप फ़ाइल तत्वों के लिए सजावट में 'व्यूहेल्पर' का उपयोग नहीं कर सकते हैं। इसके बजाय 'फाइल' का प्रयोग करें। उम्मीद है कि यह अभी भी मदद करता है।

संबंधित मुद्दे