2013-05-29 97 views
0

嗨,我嘗試使用以下格式的代碼上傳CSV文件:CSV上傳 - MIME類型

$this->widgetSchema ['file'] = new sfWidgetFormInputFile(); 

$this->setValidator('file', new sfValidatorFile(array(
      'required'  => true, 
      'path'   => sfConfig::get('sf_upload_dir') . '/properties/csv', 
      'mime_categories' => array('csv' => array('text/csv', 'application/csv', 'application/excel', 'application/vnd.ms-excel', 'application/vnd.msexcel')), 
      'mime_types'  => 'csv' 
))); 

在我的行動,我有:

 if($request->isMethod('post')) 
    { 
     $propertyCsvForm->bind($request->getParameter($propertyCsvForm->getName()), $request->getFiles($propertyCsvForm->getName())); 
     if($propertyCsvForm->isValid()) 
     { 
      $this->getUser()->setFlash('success-csv', 'The CSV was successfully imported.'); 
     } else { 
      $this->getUser()->setFlash('error-csv', 'The CSV could not be imported.'); 
     } 
    } 

當我嘗試上載CSV我總是得到一個錯誤,這是MIME類型是不正確

Invalid mime type (text/plain).

任何想法爲什麼?

感謝

+2

我的帖子可以幫你? http://stackoverflow.com/questions/16190929/detecting-a-mime-type-fails-in-php。 Mime類型檢測不可靠。 – meijuh

+1

您還應該接受普通文件(即; mime_types'text/plain')作爲csv文件。如果你用你的編輯器創建一個新文件,將它保存爲csv,並想上傳它?它將具有「文本/純文本」。驗證(使用post驗證器)你的csv的**內容**(用'fgetcsv'等..)將會更好,比如檢查你是否有XX列數,用這個術語命名等。比檢查mime_types。 – j0k

回答

1

我有同樣的問題,我解決它創建一個postValidator中,我得到的文件的路徑和我做一個測試,以檢查是否是一個CSV文件或不和它工作正常

class sfValidatorCSV extends sfValidatorSchema 
{ 
    protected function configure($options = array(), $messages = array()) 
    { 
     parent::configure($options, $messages); 
    } 

    protected function doClean($values) 
    { 
     $file = $values['file']; 

     if(empty($file)==false) 
     { 
      $filename = $file->getOriginalName(); 

      $path = pathinfo($filename); 

      if($path['extension']!="csv") 
      { 
       throw new sfValidatorError($this, 'Invalid extension.'); 
      } 
     } 
    } 
} 

而你把它在你的表格是這樣結尾:

$this->mergePostValidator(new sfValidatorCSV()); 
+1

如果csv文件實際上是一個zip文件會怎麼樣? Boum :) – j0k

+0

該文件將永遠是一個CSV – terrid25

+0

所以刪除''mime_types'=>'csv'' – DOZ