0

ファイルのアップロード時に、jpeg、png、gif形式のファイルのみが許可されるようにしたいと思います。したがって、スクリーンショットの下の「ファイルタイプ:」は、jpeg、png、およびgifを表示する必要があります。

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'
      )
      ) 
      );

しかし、それも機能しません。

フォームクラスで次のことを試しましたが、残念ながらうまくいきません。

<?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.' ) );

    }
}
?>

アクションコードは次のとおりです。

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

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


    }

}

編集:サーバー側の検証が行われる限り、受け入れられた答えが答えです。クライアント側の検証、つまり、操作がサーバーに到達する前でもアップロードできるファイルの種類をフィルタリングする必要がある場合は、ブラウザーの制約により、信頼できる方法がない可能性があります。

4

2 に答える 2

3

API の使い方が間違っているようです。sfForm::setValidator() のシグネチャはこちらです。

ただし、Web 画像のみのアップロードを許可するファイル バリデーターを設定する簡単な方法を次に示します。

$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 タイプが含まれます。

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

受け入れる MIME タイプを明示的に定義する場合は、「web_images」を次のようなタイプの配列に置き換えます。

'mime_types' => array(
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/gif'
)
于 2009-03-27T09:02:52.753 に答える
0

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

これに使用するコンポーネントはswfuploadです

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

于 2010-05-04T14:33:58.507 に答える