Symfony1 CSV上载-mime类型
您好,我正在尝试使用以下表单代码上载CSV文件: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_
$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文件