2015-12-30 3 views
1

У меня есть пользователь, у которого проблемы с загрузкой из приложения MacBook Air Photos. MacBook всего 2 года и обновляется, и они могут регулярно загружать картинку без приложения. Я не могу воспроизвести проблему самостоятельно, и мне сложно с этим справиться.Загрузка из приложения MAC Photos в форму PHP

Php код делает проверку перед загрузкой на сервер

if(getimagesize($_FILES['image']['tmp_name']) == TRUE){ //files have tmp_names on server when being uploaded 

    $name; $image; //Vars created here for use in retrieving image id from DB afterwords 
    function saveImage($uid,$name,$image){ 
     //Update to get rid of default pic from registration 
     $qry = "UPDATE profile_pics SET name='$name', image='$image' WHERE user_id='$uid';"; 
     $result=mysql_query($qry) or die(mysql_error()); 

     if($result){ 
      echo "<br/>Image uploaded."; 
     } 
     else{ 
      echo "<br/>Image not uploaded."; 
     } 
    } 

    if($_FILES['image']['size'] < 1020000){ //1.02 since file size grows when uploaded to server. 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $_FILES['image']['tmp_name']); 
    $ok = false; 
    switch ($mime) { 
     case 'image/jpeg': 
     case 'image/pjpeg': 
     case 'image/png': 
     case 'image/gif': 
     case 'image/jpg': 
     $ok = true; 
     break; 
     default: 
     $errors[] = lang("ACCOUNT_PIC_WRONG_FILETYPE"); 
     // die("Unknown/not permitted file type"); 
    } 
    if($ok == true){ 
     $image= addslashes($_FILES['image']['tmp_name']); //addslashes() function returns a string with backslashes in front of predefined 
     $name= addslashes($_FILES['image']['name']);  //characters: ', ", \, NULL. To prepare string for storage in a database and database queries 
     $image= file_get_contents($image); 
     $image= base64_encode($image); 
     saveImage($uid,$name,$image); 
    } 
    }else{ 
    $errors[] = lang("ACCOUNT_PICSIZE_TOO_LARGE"); 
    } 
} 

HTML/Javascript часть формы. Javascript выполняет некоторую проверку перед тем, как перейти на бэкэнд. Это необходимо предупредить пользователя об ошибках перед отправкой формы.

<script type="text/javascript"> 
    //Check to make sure pic size not to large 
    jQuery(document).on("change", ".input-pic[type=file]", function() { 
     var file = this.files[0]; 
     var size = file.size/1024; 
     var ext = file.name.split('.').pop(); 
     if (size > 1020) { 
      alert("Too large Image. Only image smaller than 1MB (1000kB) can be uploaded."); 
      //If too large, make field empty again 
      jQuery(this).replaceWith('<input type="file" class="form-control input-pic" name="image" id="image">'); 
     }else if(ext == "jpeg" || ext == "pjpeg" || ext == "png" || ext == "gif" || ext == "jpg"){ 
     //Do nothing, valid image type 
     }else{ 
     alert("Only jpeg, png, and gif pictures may be uploaded. You uploaded: ."+ext); 
     jQuery(this).replaceWith('<input type="file" class="form-control input-pic" name="image" id="image">'); 
     } 
    }); 
    </script> 

    <div class='row form-row' style="padding-bottom:10px;"> 
    <div class='col-md-12'> 
     <strong for="image">Upload a profile picture (JPG/PNG/GIF size limited to 1MB)</strong> 
    <input type="file" class="input-pic form-control" name="image" id="image"> 
    </div> 
    </div> 

Они продолжают получать предупреждение в JavaScript: MAC Photos error alert Опять же, они не получают это, когда они загрузить его за пределами приложения обычно (например, пользователь ПК будет делать).

+0

Кажется, что проблема с верхним или нижним регистром в javascript при проверке расширения. – Corubba

ответ

1

Я считаю, что OS X устанавливает расширение на верхний регистр. Попробуйте var ext = strtolower(file.name.split('.').pop();) и посмотрите, не проблема ли его проверки.

Примечание. Вы подтверждаете только расширение файла - это ОГРОМНЫЙ риск для безопасности.

+0

Было бы неплохо добавить независимо. Но это не OS X, которая создает ошибку, так как они могут загружаться без приложения «Фотографии». Я делаю больше проверки, чем это также, я думаю, вы только посмотрели на JS-код для проверки. –

+0

Все проблемы были проблемой, спасибо! Учитывая OS X, я знал, что он может это сделать, просто не думал об этом. Хорошее напоминание наверняка. –

+0

Нет проблем - метода strtolower() должно быть достаточно. Я использую его при любой проверке, так как случай может быть причудливым на некоторых языках. – eXplicit

 Смежные вопросы

  • Нет связанных вопросов^_^