2009-03-27 4 views
0

ファイルのアップロード時に、jpeg、png、およびgifの形式のファイルのみが許可されていることを確認します。だから、「タイプのファイル:」下のスクリーンショットではJPEG、PNGやGIFを表示する必要があります。SymfonyでのMime_type検証の設定

http://lh5.ggpht.com/_SDci0Pf3tzU/ScynOZt_0qI/AAAAAAAAEo0/gMr_zxYofV4/s400/styleerror.png

私はsymfonyの中に私のバリデータについては、以下のなかった:

$this->setValidator ('upload your filehere', 
    new sfValidatorFile (array (
    'required'=>true, 
    'mime_types' => array ('image/jpeg, image/png, image/gif') 
    ) , 
     array(

     'mime_types'=> 'only jpeg' 
    ) 
    ) 
    ); 

が、ときに私がクリックアップロードボタンでは、ファイルはそれに応じてフィルタリングされません。どうしたんだ?

私も

$this->setValidator ('upload your filehere', 
    new sfValidatorFile (array (
    'required'=>true, 
    'mime_types' => 'image/jpeg, image/png, image/gif' 
    ) , 
     array(

     'mime_types'=> 'only jpeg' 
    ) 
    ) 
    ); 

を試してみてください。しかし、それはあまりにも、動作しません。

私は私のフォームクラスに次のように試してみましたが、残念ながらそれは同様に動作しません:

public function executeIndex(sfWebRequest $request) { 
     $this->form = new UploadCaseForm (); 

if ($this->getRequest()->getMethod() == sfRequest::POST) { 
     var_dump($request->getParameter('UploadCase')); 


    } 

} 

編集:受け入れ答えがある

<?php 

class UploadCaseForm extends sfForm { 
    public function configure() { 
     $this->setWidgets (array ('Documents' => new sfWidgetFormInputFile ())); 
     $this->widgetSchema->setNameFormat ('UploadCase[%s]'); 


     $this->validatorSchema ['Documents'] = new sfValidatorFile ( 
     array ('mime_types' => 'web_images'), 
     array ('invalid' => 'Invalid file.', 
     'required' => 'Select a file to upload.', 
     'mime_types' => 'The file must be of JPEG, PNG or GIF format.')); 

    } 
} 
?> 

ここでアクションコードです答えは、限りサーバー側の検証に行く。クライアント側の検証が必要な場合、つまり操作がサーバーにヒットする前でもアップロードできるファイルのタイプをフィルタリングする場合は、おそらくthere is no reliable way to do it, because of browser's constraintとなります。

答えて

3

APIを間違って使用しているようです。 sfForm :: setValidator()の署名はhereです。

image/jpeg 
image/pjpeg 
image/png 
image/x-png 
image/gif 

の場合:

$this->validatorSchema['my_file'] = new sfValidatorFile(array(
    'mime_types' => 'web_images' 
), array(
    'invalid' => 'Invalid file.', 
    'required' => 'Select a file to upload.', 
    'mime_types' => 'The file must be of JPEG, PNG or GIF format.' 
)); 

は「web_images」のカテゴリには、次のMIMEタイプが含まれています

しかし、ここでの唯一のウェブ画像をアップロードすることを可能にするファイルのバリデータを設定するための簡単な方法です受け入れるMIMEタイプを明示的に定義したい場合は、 'web_images'を次のようなタイプの配列に置き換えます。

'mime_types' => array(
    'image/jpeg', 
    'image/pjpeg', 
    'image/png', 
    'image/x-png', 
    'image/gif' 
) 
+0

ありがとうございますが、私のMIMEタイプは画像のみを含むべきではありません。私はまた、zipファイル、または単語の文書ファイルを含める必要があります – Graviton

+0

あなたの質問から、あなただけの画像がほしいと思うように思えるでしょう。カスタムMIMEタイプを設定する方法の解説を編集しました。 – Ree

+0

残念ながら、それは動作していないようです。私は質問 – Graviton

0

ブラウザでのアップロードから制約ファイルを選択する方法があります。
欠点は、フラッシュを使用してファイルを選択し、フラッシュプレーヤーがインストールされているユーザーにサポートを制限することです。利点は、あなたがアップロード(parrallelのアップロード、進行、エラー、controleファイルの拡張子の選択などが可能)を制御することができます。

私はこのために使用するコンポーネントがswfupload

EDITです:これは、アップロードされたファイルには、サーバー側の制御を行うことを免除されませんが、組み合わせて使用​​することは、同様のセキュリティleelとはるかに優れたユーザーエクスペリエンス(エラーを提供しています長時間実行されるアップロードの開始前に発生する可能性があります)