2015-04-17 2 views
2

Я пытаюсь загрузить файл ajax. Я пробовал один и тот же скрипт в другом предложении. Он работал правильно. Но теперь он не работает. На стороне сервера я получаю 'Null' с var_dump($_FILES["uploadFiles"]); и var_dump($_POST["uploadFiles"]); возвращает пустой массив: массив (1) {[0] => строка (0) ""}

Так что я подозреваю, что некоторые проблемы с апача конфигурации/PHP ,

В одном из предложенных решений here обсуждается правила переадресации htaccess. Вот мой контент htaccess:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress</code> 

Есть ли что-то не так с моим содержимым htaccess?

Если нет, то что еще может быть причиной того, что $ _FILES будет Нулевым?

Мои php.ini переменные:

post_max_size = 160M 
upload_max_filesize = 100M 
upload_tmp_dir = "/tmp/" 
file_uploads = On 
max_file_uploads = 20 

Заранее спасибо за вашу помощь.

обновление:

Ответные заголовки в браузере: enter image description here

Вот мой код:

<form class="inputF" id="entry_upload_form" action="" method="post" enctype="multipart/form-data"> 

     <div class="field_text"> 
     Attach file: 
     </div> 
     <input type="file" name="file1[]" id="file1"> <br> 

     <div class="field_text"> 
     Attach file: 
     </div> 
     <input type="file" name="file2[]" id="file2"> <br> 

     <div class="field_text"> 
     Attach file: 
     </div> 
     <input type="file" name="file3[]" id="file3"> <br> 

     <div class="buttonRow"> 
      <button class="submit buttons greenButton">Post</button> 
      <button class="reset buttons blueButton">Reset</button> 
     </div> 
    </form> 

часть моего JQuery:

var fileSelect = document.getElementById('file1'); 
    files1 = fileSelect.files; 

    if(files1.length != 0) { 
     files[i] = fileSelect.files; 
     i++; 
    } 

    fileSelect = document.getElementById('file2'); 
    files1 = fileSelect.files; 

    if(files1.length != 0) { 
     files[i] = fileSelect.files; 
     i++; 
    } 

    fileSelect = document.getElementById('file3'); 
    files1 = fileSelect.files; 

    if(files1.length != 0) { 
     files[i] = fileSelect.files; 
     i++; 
    } 

    // Create a new FormData object. 
    var formData = new FormData(); 

    // Loop through each of the selected files. 
    for (var i = 0; i < files.length; i++) { 
     var file = files[i]; 

     // Add the file to the request. 
     formData.append('uploadFiles[]', file, file.name); 
    } 

    jQuery.ajax({ 
     url: content_url + '/themes/Karma/entry-portal/ajax_upload.php', //Server script to process data 
     type: 'POST', 
     xhr: function() { // Custom XMLHttpRequest 
      var myXhr = jQuery.ajaxSettings.xhr(); 
      if(myXhr.upload){ // Check if upload property exists 
       myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // For handling the progress of the upload 
      } 
      return myXhr; 
     }, 
     //Ajax events 
     beforeSend: function() { 
       //jQuery("#wpboulevard_progressBar").show(); 
      }, 
     success: function (response) { 
       //jQuery('#wpboulevard_upload_status').html(response); 
      }, 
       //error: errorHandler, 
     // Form data 
     data: formData, 
     //Options to tell jQuery not to process data or worry about content-type. 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 

    return false; 
//On success 
    function completeHandler(){ 
     jQuery().html('Files uploaded successfully'); 
    } 

    //Progress handling function 
    function progressHandlingFunction(e){ 
     if(e.lengthComputable){ 
      jQuery('progress').attr({value:e.loaded,max:e.total}); 
     } 
    } 
}); 
+0

Нет ошибок и предупреждений в журналах?/tmp доступна? Вот хороший контрольный список: http://stackoverflow.com/questions/3586919/why-would-files-be-empty-when-uploading-files-to-php – ficuscr

+0

Вы просматривали запрос/ответ в консоли браузера ? –

+1

Tried 'formData.append ('uploadFiles', file);' вместо 'formData.append ('uploadFiles []', file, file.name);'? См. Https://developer.mozilla.org/en-US/docs/Web/API/FormData#Browser_compatibility – guest271314

ответ

1

Изменить HTML для это:

<form class="inputF" id="entry_upload_form" enctype="multipart/form-data"> 
     <div class="field_text">Attach file:</div> 
     <input type="file" name="files[]" id="myFiles" multiple> <br> 

     <div class="buttonRow"> 
      <button class="submit buttons greenButton">Post</button> 
      <button class="reset buttons blueButton">Reset</button> 
     </div> 
    </form> 

Изменения в HTML позволяют пользователю загружать несколько файлов только с одним вводом файла. Если вы хотите ограничить пользователя только 3-мя файлами, вы можете сделать это на стороне клиента с помощью javascript, или вы можете сделать это на стороне сервера с помощью PHP. Пользователь может удерживать клавишу CTRL или Shift, чтобы выбрать сразу несколько файлов для загрузки.

Теперь измените эту часть вашего JavaScript/JQuery из этого:

var fileSelect = document.getElementById('file1'); 
    files1 = fileSelect.files; 

    if(files1.length != 0) { 
     files[i] = fileSelect.files; 
     i++; 
    } 

    fileSelect = document.getElementById('file2'); 
    files1 = fileSelect.files; 

    if(files1.length != 0) { 
     files[i] = fileSelect.files; 
     i++; 
    } 

    fileSelect = document.getElementById('file3'); 
    files1 = fileSelect.files; 

    if(files1.length != 0) { 
     files[i] = fileSelect.files; 
     i++; 
    } 

    // Create a new FormData object. 
    var formData = new FormData(); 

    // Loop through each of the selected files. 
    for (var i = 0; i < files.length; i++) { 
     var file = files[i]; 

     // Add the file to the request. 
     formData.append('uploadFiles[]', file, file.name); 
    } 

Для этого:

var formData = new FormData(); 
// Loop through each file attached for upload and append it to formData 
$.each($('#myFiles')[0].files, function(i, file) { 
    formData.append('uploadFiles['+i+']', file); 
}); 
Смежные вопросы