在我的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文件。
答案 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