【问题标题】:How to filter through multiple MimeTypes for validation during file-upload using CakePHP 1.3?如何在使用 CakePHP 1.3 的文件上传期间过滤多个 MimeType 以进行验证?
【发布时间】:2012-08-13 17:56:51
【问题描述】:

我有一个文件上传功能,我想允许图像和文档而禁止其他图像和文档,只检查扩展名听起来是个坏主意。

我拥有的代码 sn-p 是:

var $actsAs = array(
    'MeioUpload' => array(
        'file' => array(
            'dir' => 'uploads{DS}{ModelName}',
            'fields' => array(
                'filesize' => 'size',
                'mimetype' => array('image/jpeg', 'image/pjpeg', 'image/gif',
                'image/png', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                'application/vnd.openxmlformats-officedocument.presentationml.presentation','application/pdf'),
                'message' => 'Please upload a valid document file'
            ),
            'allowed_mime' => array('image/jpeg', 'image/pjpeg', 'image/gif',
                'image/png', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                'application/vnd.openxmlformats-officedocument.presentationml.presentation','application/pdf'),
            'allowed_ext' => array(' .docx',' .jpg',' .jpeg',' .png',' .gif',' .doc',' .xls',' .xlsx',' .pdf'),
            'validations' => array(
                'MaxSize' => array(
                    'check' => false,
                ),
            ),
            'message' => 'Invalid File. Please upload only document or images'
        ),
    ),
);

如何分配 mimetype 以允许:.txt、.doc、.docx、.xls、.xlsx、.pdf、.png、.jpg、.gif、.jpeg 仅限

MEIOUPLOAD 调整会很棒!

【问题讨论】:

    标签: php validation cakephp cakephp-1.3 mime-types


    【解决方案1】:

    试了好几个地方,终于求助于 PHP 的核心功能。 MeioUpload 不支持检查多种 mime 类型。希望未来的版本可能会有所增强。

                    $allowMime = array('image/jpeg', 'image/pjpeg', 'image/gif',
                                    'image/png', 'application/msword','application/vnd.ms-office','application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                                    'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
                                    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                                    'application/vnd.openxmlformats-officedocument.presentationml.presentation','application/pdf');
                    $file_info = new finfo(FILEINFO_MIME);
                    $filename = $attachments[$file_name];
                    $data = explode(";",$file_info->file($filename));
                    $mime = $data[0];
                    if(in_array($mime, $allowMime))
                    {
     //Your code here
    

    【讨论】:

      【解决方案2】:

      您可以使用Mime Type Model Validation。 代码如下:

      This rule checks for valid mimeType
      
      <?php
         public $validate = array('image' => array(
                            'rule' => array('mimeType', array('image/gif')),
                            'message' => 'Invalid mime type.'
                                          ),
                                  );
      

      【讨论】:

      • 谢谢!我现在收集了它。但是,我正在寻找“多种”mimetypes,我可以在其中编写 mimetypes 列表以允许。
      • 这是 mime 类型的列表。我想列出几个 mime 类型。即允许的 mime 类型。例如,如果我有一个允许 mimetypes 的过滤器.. 并且有人上传说.. 一个 .exe 文件,我想立即阻止它。
      • 您可以将所有允许的 mimeTypes 写入您指定 'image/gif' 的 array() 中,以逗号分隔。
      • 请检查我的问题,我已经用我当前使用的代码对其进行了编辑,然后我尝试添加 .sh 文件和 .php 甚至 .exe 文件,虽然 .exe 被 gmail 阻止了但是,它将 .php 和 .sh 文件清除到邮箱中。问题是,它应该给出一个错误而不是让它通过?哦,顺便说一句,我正在使用它与邮件......
      猜你喜欢
      • 2016-06-08
      • 2012-09-24
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多