2015-05-13 4 views
2

У меня возникла проблема проверки имени файла, которое пользователь загружает в файл. У меня уже была проверка на расширение файла, но когда пользователь пытается загрузить пример имени файла 1.hello.jpg, для моего кода проверки JavaScript он выглядел нормально, так как он был jpg. Но в моей части PHP моя проверка для расширения файла не распознает ее, поскольку я использую функцию explode для проверки расширения файла.Javascript validate file input name

Есть ли способ проверить специальный символ файла на стороне клиента перед отправкой на сервер? Благодаря

Вот моя проверка на стороне клиента:

<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)) 
        { 

         ........... 
        } 
       } 
+0

1.hello.jpg имеет две точки, с помощью которых вы пытаетесь взорваться, поэтому при разрыве $ ext имеет значение hello, которое является недопустимым. –

+0

Что делать, если я загрузил файл 'something.jpg.php' из того, что я читаю, это будет загружаться, и тогда я смогу выполнить свой собственный серверный код на вашем сервере, предоставляя мне доступ ко всему, что угодно и что угодно ... – NewToJS

+0

@newtojs Что я понимаю из вашего утверждения, php-файл не может отправить его на мой сервер, потому что моя проверка подлинности Java-кода разрешена только для файла изображения –

ответ

0

Я решил его с помощью функции split на javascript.

Вот мой код:

//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 (Success)

Спасибо за помощь. Значительная оценка

2

В вашем использовании PHP PATHINFO_EXTENSION, чтобы получить расширение файла:

$ext = pathinfo($name, PATHINFO_EXTENSION); 

Для получения дополнительной информации отметьте Here.

+0

Я пробовал это, но так и не смог его решить. –

+0

что это выводит? – Afsar

+0

Если я попробую 1.dscksodjh.jpg он также не позволяет мне вставлять в мою базу данных –

1

доступа Try ниже значения

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

и проверки на стороне сервера.

+0

Подождите меня, попробуйте и вернитесь к u –

+0

Как я могу выполнить проверку на стороне клиента? –

+0

return filename.split ('.'). Pop(); –