2

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

您还应该通过在模型上设置验证(查看extensionmimeType验证规则)来验证文件到达服务器后。

您还可以在用户选择文件扩展名后使用 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 回答