Symfony2限制最终用户仅上载csv文件

时间:2014-08-26 07:39:22

标签: php symfony csv doctrine-orm

在我的symfony2应用程序中,我正在使用doctrine,我希望用户只上传csv文件。

以下是我在实体文件中设置验证的代码:

use Symfony\Component\Validator\Constraints as Assert;

/**
 * @var string
 * @Assert\File( maxSize = "1024k", mimeTypes = {"text/csv"}, mimeTypesMessage = "Please   upload a valid CSV File")
 * @ORM\Column(name="filename", type="string", length=255)
 */
private $filename;

但它仍然不允许我上传csv文件。

2 个答案:

答案 0 :(得分:1)

发表评论后: “文件的mime类型无效(”text / plain“)。允许的mime类型为”text / csv“

经过一些搜索,Symfony 2正在使用finfo()功能。您可以阅读Php doesn't return the correct mime type

Pekka웃:“我并不熟悉fileinfo的工作方式,但我认为这是正常的。文本文件(这就是CSS和JS的内容)没有明确指出它有什么内容它们没有头字节,也没有定义的结构。所以所有糟糕的文件信息都可以猜测 - 结果很差,你可以看到。

我认为要成功验证.js和.css文件的内容,您必须依赖扩展,或者使用正确的,适当的解析器实际解析它们。“

所以这不是错误,唯一的方法是实现你自己的逻辑(在你的FormBuilder中)或像tutty说你可以创建自定义约束。

修改

根据你的评论,这里是使用Symfony 2 finfo()的地方: Component/HttpFoundation/File/MimeType/FileinfoMimeTypeGuesser.php

答案 1 :(得分:-1)

这是因为你的文件有另一个mime类型(可能是text / plain)。您应该验证文件内容。您可以在此处详细了解自定义验证器:http://symfony.com/doc/current/cookbook/validation/custom_constraint.html