2

ファイル入力ダイアログを制限して、特定の種類のファイルのみを表示する方法があるかどうかを知りたかっただけです。私の Web ページは .bin または .gz ファイル タイプのみを受け入れることができますが、ユーザーは他のファイル タイプを選択してアップロードを試みることができます。

間違った種類のファイルがアップロードされるのを防ぐ最善の方法は何ですか?

ファイルアップロード用のコントローラーは次のとおりです。

    public function uploadFile()
    {
        $this->Session->write('isFileUpload', false);
        $this->Session->write('isFileLarge', false);

        if($this->request->is('post'))
        {
            $uploadedFile = array();

            // Check if the Document object is set
            // If it is set, process the file for uploading,
            if(isset($this->request->data['Document']))
            {
                $filename = $this->request->data['Document']['MyFile']['tmp_name'];

                $uploadedFile['MyFile']['name'] = $this->request->data['Document']['MyFile']['name'];
                $uploadedFile['MyFile']['type'] = $this->request->data['Document']['MyFile']['type'];
                $uploadedFile['MyFile']['size'] = $this->request->data['Document']['MyFile']['size'];

                // Move the file to the /home/spectracom folder
                $filePath = DS . 'home' . DS . $uploadedFile['MyFile']['name'];

                if (move_uploaded_file($filename, $filePath))
                {
                    $this->Session->write('isFileUpload', true);
                    $this->Session->write('isFileLarge', false);
                    $this->redirect('/tools/upgradebackup');
                }
                else
                {
                    $this->Session->write('isFileUpload', false);
                    $this->Session->write('isFileLarge', true);
                    $this->redirect('/tools/upgradebackup');
                }
            }
            else
            {
                $this->Session->write('isFileUpload', false);
                $this->Session->write('isFileLarge', true);
                $this->redirect('/tools/upgradebackup');
            }
        }
    }

私は基本的に、ファイルが存在すること、または大きすぎることを確認します。メインのアップグレード ページに戻ると、セッション変数が設定されます。

ありがとう

4

2 に答える 2

5

すべてのブラウザーがサポートしているわけではありませんが、accept属性を使用して、ブラウザーがファイル選択ダイアログでユーザーに選択できるものを制限します。

これは入力を作成するために機能するはずだと思います(何が機能するかを確認するには、MIME タイプをいじる必要があります):

echo $this->Form->input('MyFile', array('type' => 'file', 'options' => array('accept' => 'application/gzip,application/gzipped,application/octet-stream')));

また、ファイルがサーバーに到着したら、モデルに検証を設定して検証する必要があります(look atextensionおよびmimeTypevalidation rules)。

また、JavaScript を使用して、ユーザーが選択したファイル拡張子を検証し、拡張子が間違っている場合はファイル入力フィールドをクリアすることもできます。

于 2012-08-28T15:29:49.467 に答える
0

Cakephp 3.4でテスト済み

$this->Form->control('my_file', ['label' => 'Upload File','type' => 'file', 'accept' => 'application/msword']);
于 2017-06-05T20:55:50.513 に答える