Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony1 CSV上载-mime类型_Symfony1_Symfony 1.4_Symfony Forms - Fatal编程技术网

Symfony1 CSV上载-mime类型

Symfony1 CSV上载-mime类型,symfony1,symfony-1.4,symfony-forms,Symfony1,Symfony 1.4,Symfony Forms,您好,我正在尝试使用以下表单代码上载CSV文件: $this->widgetSchema ['file'] = new sfWidgetFormInputFile(); $this->setValidator('file', new sfValidatorFile(array( 'required' => true, 'path' => sfConfig::get('sf_upload_

您好,我正在尝试使用以下表单代码上载CSV文件:

$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类型不正确

无效的mime类型(文本/普通)。

你知道为什么吗


谢谢

我遇到了同样的问题,我解决了它,创建了一个
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());

我的帖子对你有帮助吗。Mime类型检测不可靠。您还应接受普通文件(即Mime_类型
text/plain
)作为csv文件。如果您使用编辑器创建了一个新文件,将其另存为csv并希望上载该文件,该怎么办?它将具有
文本/纯文本
。最好(使用后期验证器)验证您的csv内容(使用
fgetcsv
etc..),比如检查您是否有XX个列,以该术语命名,等等。。而不是检查mime_类型。如果csv文件实际上是一个zip文件怎么办?Boum:)该文件将始终是CSVSo删除
'mime_types'=>'csv'
获取一个文件
test.zip
,将其重命名为
test.csv
,然后上载。完成。您的代码只检查文件名中的扩展名,而不检查内容。是的,必须使用
finfo_file
函数添加测试以检查它是否为zip文件