使用Symfony2处理Ajax文件上载

时间:2014-07-29 13:02:43

标签: symfony symfony-forms fine-uploader ajax-upload

我曾经有一个正在处理fineuploader ajax上传的ZF控制器。代码很简单:

$adapter = new Zend_File_Transfer_Adapter_Http();
        $filename = uniqid();
        $adapter->addFilter('Rename', APPLICATION_PATH . "/../public/temp-images/" . $filename);
        $adapter->addValidator('Size', false, array("max" => "2MB"));
        $adapter->addValidator('isImage', false);
        if ($adapter->receive()) {
            // Get mime type
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $mimeType = finfo_file($finfo, APPLICATION_PATH . "/../public/temp-images/" . $filename);
            finfo_close($finfo);

            preg_match('/(.*)\/(.*)/', $mimeType, $matches);
            $extension = '.' . $matches[2];

现在我正在使用Symfony2重构,我在做同样的事情时遇到了困难。这就是我到目前为止所做的:

$form = $this->createFormBuilder()
    ->add('qqfile', 'file', array('constraints' => new File(array('maxSize' => '2M'))))
    ->getForm();


    if ($form->isValid()) {
       die('yes');
    } else {
       die('no');
    }

这是从浏览器发送的内容:

  

------ WebKitFormBoundaryYPzt2RqJ6W4awSFp Content-Disposition:form-data;名称= “qquuid”

     

b977c4b2-0edb-486B-aa86-4558275598aa   ------ WebKitFormBoundaryYPzt2RqJ6W4awSFp Content-Disposition:form-data;名称= “qqtotalfilesize”

     

14092   ------ WebKitFormBoundaryYPzt2RqJ6W4awSFp Content-Disposition:form-data; NAME = “qqfile”; filename =“ae35e28.png”内容类型:   图像/ PNG

     

------ WebKitFormBoundaryYPzt2RqJ6W4awSFp -

现在,我确信表单不会被验证,因为POSTed数据不包含表单的名称。实际上,我甚至不需要验证整个表单,只需要上传文件(例如Symfony2: upload a file using a file upload plugin),但我如何使用验证呢?

1 个答案:

答案 0 :(得分:0)

我最终自己弄清楚了。

我没有使用没有类的表单,而是创建了一个类表单,其getName()方法返回一个空字符串。我为除qqfile之外的所有其他字段设置了mapped = false,并且还禁用了表单的csrf保护。通过这种方式,表单可以正确提交并验证文件输入。