我曾经有一个正在处理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');
    }
.

这是从浏览器发送的:

------ webkitformboundyypzt2rqj6w4awsfp content-simposition:form-data; name=“qquid”

B977C4B2-0EDB-486B-AA86-4558275598AA ------ WebkitFormBoundaryypzt2RQJ6W4AWSFP Content Dispion:Form-Data; name=“qqtotalfilesize”

14092 ------ WebkitFormBoundaryypzt2RQJ6W4AWSFP Content Dispion:Form-Data; name=“qqfile”; filename=“ae35e28.png”内容类型: 图像/ png

------ webkitformboundaryypzt2rqj6w4awsfp -

现在,我知道表格不会被验证,因为发布的数据不包含表单的名称。实际上,我甚至不需要验证整个形式,只是上传的文件(如这里 symfony2:使用文件上传插件上传文件),但如何使用验证?

有帮助吗?

解决方案

我最终发现了自己。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top