限制CakePHP文件输入中的文件类型

时间:2012-08-28 14:25:38

标签: file cakephp upload mime file-type

我只是想知道是否有办法限制文件输入对话框只显示某些类型的文件。我的网页只能接受.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');
            }
        }
    }

我基本上检查文件是否存在,否则它太大了,当它返回主升级页面时,它会设置会话变量。

由于

2 个答案:

答案 0 :(得分:5)

您可以使用accept attribute限制浏览器允许用户在文件选择对话框中选择的内容,但并非所有浏览器都支持它。

我认为这应该适用于创建输入(您需要使用MIME类型来查看哪些有效):

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

您还应该在文件到达服务器后通过设置validation on your model来验证这些文件(查看extensionmimeType验证规则)。

一旦用户选择了文件扩展名,您也可以使用JavaScript验证文件扩展名,如果扩展名错误,则清除文件输入字段。

答案 1 :(得分:0)

使用Cakephp 3.4进行测试

$this->Form->control('my_file', ['label' => 'Upload File','type' => 'file', 'accept' => 'application/msword']);