改进文件扩展名检测和上传限制

时间:2016-09-03 16:32:35

标签: javascript php jquery

我知道有很多与此相关的问题和答案,但我想知道在服务器端和客户端对文件扩展进行限制的最佳方法。

PHP

$allowedTypes = array('gif', 'png', 'jpeg', 'jpg', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'pptx', 'mp3', 'mp4', 'rar', 'zip', 'txt');

$File_Name          = strtolower($_FILES['uploadfile']['name']);
$File_Ext           = pathinfo($File_Name, PATHINFO_EXTENSION);
if(!in_array($File_Ext, $allowedTypes)) {
    die('Unsupported File format!');
}

JS

var ftype = $('#uploadfile')[0].files[0].type; // get file type

        //allowed file types
        switch(ftype)
        {
            case 'image/png':
            case 'image/gif':
            case 'image/jpeg':
            case 'image/pjpeg':
            case 'text/plain':
            case 'text/html':
            case 'application/x-zip-compressed':
            case 'application/x-rar-compressed':
            case 'application/octet-stream':
            case 'application/pdf':
            case 'application/msword':
            case 'application/vnd.ms-excel':
            case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
            case 'video/mp4':
                break;
            default:
                notify("Unsupported file type!");
                return false
        }

1 个答案:

答案 0 :(得分:0)

您可以在<input type="file">元素

使用accept属性
  

接受

     

如果type属性的值是file,则此属性指示服务器接受的文件类型;   否则会被忽略。该值必须是以逗号分隔的列表   唯一内容类型说明符:

     
      
  • 以STOP字符(U + 002E)开头的文件扩展名。 (例如:“.jpg,.png,.doc”)
  •   

<input type="file" accept=".gif,.png,.jpeg,.jpg,.pdf,.xls,.xlsx,.doc,.docx,.ppt,.pptx,.mp3,.mp4,.rar,.zip,.txt" />