Javascript验证文件输入名称

时间:2015-05-13 04:30:24

标签: javascript php validation

我目前在验证用户上传到文件输入中的文件名时遇到问题。我已经对文件扩展名进行了验证,但是当用户尝试上传文件名示例1.hello.jpg时,对于我的JavaScript验证代码,它看起来没问题,因为它是jpg扩展名。但是在我的PHP部分中,我对文件扩展名的验证无法识别它,因为我使用explode函数来验证文件扩展名。

在提交到我的服务器端之前,有没有在客户端验证文件的特殊字符?感谢

以下是我在客户端的验证:

    <script type='text/javascript'>

            function checkDisabled(yourSubmitButton){


              //No 1 file input validation  
              var res_field = document.getElementById('uploaded_file').value; 
              var extension = res_field.substr(res_field.lastIndexOf('.') + 1).toLowerCase();
              var allowedExtensions = ['jpg','JPG','bmp','BMP','png','PNG','jpeg','JPEG'];

              if(document.getElementById('bannerName').value.length !=0){
                  //File input extension validation
                  if (res_field.length > 0)
                 {
                      if (allowedExtensions.indexOf(extension) !== -1) 
                         {
                           yourSubmitButton.disabled = false;
                            return;
                         }
                }
              }



                // If we have made it here, disable it
                yourSubmitButton.disabled = true;

              };
              </script>     

以下是我验证扩展程序的PHP代码:

$valid_formats = array("jpg", "JPEG","png","PNG","bmp","BMP",'JPG','jpeg');
    if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
        {
            $name = $_FILES['uploaded_file']['name'];
            $size = $_FILES['uploaded_file']['size'];
            $bName = $_POST['bannerName'];
            $bDescription = $_POST['bannerDescription'];
            $bK = $_POST['bannerK'];
            $bKe = $_POST['bannerKe'];
            $bS= $_POST['bannerS'];

            if(strlen($name))
                {
                    list($txt, $ext) = explode(".", $name);
                    if(in_array($ext,$valid_formats))
                    {

                        ...........
                    }
                }

3 个答案:

答案 0 :(得分:2)

在PHP中使用PATHINFO_EXTENSION获取文件扩展名:

$ext = pathinfo($name, PATHINFO_EXTENSION);

有关详情,请查看Here

答案 1 :(得分:1)

尝试访问以下值

$_FILES["uploaded_file"]["type"] 

并在服务器端验证。

答案 2 :(得分:0)

我在javascript上使用split函数解决了这个问题。

这是我的代码:

//Check for dot that is not more than 1
            var checkStr = 0;
            var str = document.getElementById('uploaded_file').value;
            var res = str.split(".");

            for(var i = 0 ; i <= res.length;i++){
                checkStr++;
            }

            if(checkStr>3){

                alert(str+' invalid filename detected. \n\n Please rename your file.');
                return false;
            }

对于像我这样的初学者可以参考,因为我试图将浏览器的文件名分成文件输入。如果split函数后的数组大于3,则提示输出错误。

示例:

  1. -1.hello.jpg(错误)
  2. -1_hello.jpg(成功)
  3. 感谢所有帮助。非常感谢