【问题标题】:Javascript validate file input nameJavascript验证文件输入名称
【发布时间】:2015-07-24 04:53:10
【问题描述】:

我目前在验证用户上传到文件输入的文件名时遇到问题。我已经对文件扩展名进行了验证,但是当用户尝试上传文件名示例 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))
                    {

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

【问题讨论】:

  • 1.hello.jpg 有两个点,你试图通过它来爆炸,所以在爆炸时 $ext 的值 hello 是无效的。
  • 如果我上传一个文件something.jpg.php 从我正在阅读的内容中上传,然后我可以在您的服务器上执行我自己的服务器端代码,让我可以访问几乎所有内容。 ..
  • @newtojs 从您的陈述中我了解到,php 文件无法将其提交到我的服务器,因为我的 java 脚本验证只允许使用图像文件
  • @sanjay 根据您的知识,验证文件名和扩展名的最佳解决方案是什么?谢谢
  • @MarcusTan Javascript 是客户端的,可以使用浏览器控制台进行更改。示例allowedExtensions.push('php');

标签: javascript php validation


【解决方案1】:

我已经通过在 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(成功)

感谢所有帮助。非常感谢

【讨论】:

    【解决方案2】:

    尝试访问以下值

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

    并在服务器端进行验证。

    【讨论】:

    • 等我试试再回复你
    • 如何在客户端进行验证?
    • 返回文件名.split('.').pop();
    【解决方案3】:

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

    $ext = pathinfo($name, PATHINFO_EXTENSION);
    

    更多信息,请查看Here

    【讨论】:

    • 输出什么?
    • 如果我尝试 1.dscksodjh.jpg 它也不允许我插入到我的数据库中
    • 您要插入什么,名称或文件
    • 当用户浏览文件并想提交时
    猜你喜欢
    • 2022-12-11
    • 2017-12-11
    • 2016-09-23
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多