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');
}
.
これはブラウザから送信されるものです:
------- WebKitFormBoundAryyPZT2RQJ6W4AWSFPコンテンツ配置:フォームデータ。 name="qquid"
B977C4B2-0DB-486B-AA8-455827598-4558275598-4558275598-4558275598-4558275598-4558275598 ------- WebKitFormBoundAryypzt2RQJ6W4AWSFP Content-Desposition:form-data; name="QQTotalFileSize"
14092 ------- WebKitFormBoundAryypzt2RQJ6W4AWSFP Content-Desposition:form-data; name="qqfile"; filename="ae35e28.png" content-type: 画像/ png
------ WebKitFormBoundAryyPZT2RQJ6W4AWSFP -
今、投稿されたデータにフォームの名前が含まれていないため、フォームが検証されないことを確認します。実際には、アップロードされたファイルだけで、アップロードされたファイルだけを検証する必要さえありません(ここにのような symfony2:ファイルのアップロードプラグインを使用してファイルをアップロードしますが、検証を使用するにはどうすればいいですか?
解決
最終的に自分自身を考え出した。
クラスなしでフォームを使用する代わりに、GetName()メソッドが空の文字列を返すクラスフォームを作成しました。QQFILEを除くすべての他のフィールドにMapped= Falseを設定し、フォームのCSRF保護を無効にします。このようにして、フォームが正しく送信され、ファイル入力が検証されました。