使用symfony2处理ajax文件上传
-
21-12-2019 - |
题
我曾经有一个正在处理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保护。通过这种方式,表单已正确提交并验证了文件输入。
不隶属于 StackOverflow