За последние 24 часа нас посетили 22027 программистов и 1124 робота. Сейчас ищут 858 программистов ...

Загрузка изображений

Тема в разделе "Сделайте за меня", создана пользователем shahin87, 24 фев 2017.

  1. shahin87

    shahin87 Новичок

    С нами с:
    24 фев 2017
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте нужно загрузить несколько или одно (по выбору) изображений на сайт. скрипт есть файлы выбираются, но я не могу их передать на обработчик на php чтобы загрузить на сервер. И подскажите пожалуйста как сделать чтобы все передовалось на php не аяксом, а просто переходило как обычно переходит форма методом пост.
    Вот сам скрипт:

    Код (Javascript):
    1. jQuery(function($) {
    2. /// определение jQuery - начало
    3.  
    4.  
    5.  
    6.   //объявлем 2 переменных в которые будет помещён массив файлов после выбора в поле <input type="file">
    7.  
    8.   var otzivi_files;
    9.   var otzivi_files_tmp = [];
    10. function prepareUpload(event)
    11. {
    12. /*
    13. одна переменная временная
    14. в неё заносится список полученные сразу после выбора файлов
    15. вторая содержит весь список включая и файлы выбранные ранее
    16. */
    17.  
    18. // присвоение только что выбранных файлов
    19. otzivi_files = event.target.files;
    20.  
    21.  
    22.   // обновление общего массива файлов
    23.   $(otzivi_files).each(function(){
    24.   otzivi_files_tmp = otzivi_files_tmp.concat(this);
    25.   });
    26.  
    27.   // перерисовка списка после выбора дополнительных файлов
    28.   $(function (){
    29. repaint_uplod_items();
    30.   });
    31.  
    32. }
    33.  
    34.  
    35. /*
    36. эта функция отслеживает изменение поля <input type="file">
    37. и добавляет в общий массив выбранные файлы посредством обратного вызова
    38. */
    39. $('input[type=file]').on('change', prepareUpload);
    40.  
    41. function repaint_uplod_items()
    42. {
    43. /*
    44. этот код помещён в функцию
    45. так как:
    46. после удаления элемента, происходит изменение индексов в массиве otzivi_files_tmp
    47. у кнопки "удалить" остаются старые индексы
    48. в этом случае уже нельзя правильно удалить элементы кнопками
    49. из-за нарушения первоначальных индексов
    50. поэтому, после удаления элемента, следует перерисовать их список заново.
    51. */
    52.  
    53. // выбираем контейнер для списка
    54. var fileList = $('#fileList');
    55.  
    56. // очищаем от предыдущего кода
    57. $(fileList).html('');
    58.  
    59. // формируем визуальную таблицу из массива файлов
    60. var table = '<table border = "0" cellspacing = "0" cellpadding = "0"><tr>';
    61. for (var i=0; i < otzivi_files_tmp.length; i++) {
    62.  
    63. // устанавливаем ссылку на текущий объект
    64. var this_obj = otzivi_files_tmp[i];
    65.  
    66. // получаем ссылку на картинку для использования в img src
    67. try{
    68.  
    69. /*
    70. из-за бага, в сафари этот метод не работает
    71. поэтому в случае неудачи, нужно пропустить этот шаг
    72.   ссылка на баг https://bugs.webkit.org/show_bug.cgi?id=101671
    73.   пример, аналогичного скрипта,
    74.   который тоже не работает в сафари http://blueimp.github.io/jQuery-File-Upload/
    75. */
    76.  
    77. img_src = window.URL.createObjectURL(this_obj);
    78. } catch(e) {}
    79.  
    80.  
    81. // формируем таблицу
    82. // js не поддерживает переносы строки, поэтому пришлось вот так её рисовать
    83.  
    84. table += '<td>';
    85. table += '<div class="image_thummb">';
    86. if('undefined' != typeof img_src) table += '<a class="del_uplod_image" href="#'+i+'"><img class="del_im" src="css/x.png" /></a><img src="'+img_src+'" class="im" alt="" border="0" />';
    87. table += '</div>';
    88. table += '</td>';
    89. table += '';
    90. if('undefined' != typeof img_src) img_src.onload = function(){window.URL.revokeObjectURL(img_src);} // освобождаем память выделенную под картинку
    91.  
    92. }
    93. table += '</tr></table>';
    94. $(fileList).html(table); // выгружаем в контейнер созданную визуальную таблицу
    95. }
    96.  
    97.  
    98.  
    99.  
    100. /*
    101. функция которая удаляет из массива элементы
    102. после этого наглядно показывает удаление элемента из списка fadeOut()
    103. и перерисовывает таблицу выбранных файлов
    104. использование $('body').on('click' ... обусловлено тем,
    105. что ссылки эти создаются динамически на странице, что делает невозможным использование обычного click()
    106. */
    107. $('body').on('click', 'a.del_uplod_image', function(){
    108. if(!confirm('удалить?'))return(false); // переспрашиваем, удалить ли файл из списка
    109. var to_del_id = $(this).attr('href').replace('#','') * 1; // получаем индекс удаляемого файла
    110. if('undefined' != typeof otzivi_files_tmp && otzivi_files_tmp.length)
    111. {
    112. // проверяем массив и элемент массива на существование
    113. if('undefined' != typeof otzivi_files_tmp[to_del_id] && otzivi_files_tmp[to_del_id])
    114. {
    115. otzivi_files_tmp.splice(to_del_id,1);
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    http://code.runnable.com/V6g3OfA2Bv...data-ajax-files-upload-for-php-and-javascript
    PHP:
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    4.     var_export($_FILES);
    5.     echo PHP_EOL;
    6.     var_export($_POST);
    7.     exit();
    8. }
    9. ?>
    10. <!DOCTYPE html>
    11. <html>
    12. <head>
    13.     <title></title>
    14.     <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.js"></script>
    15. </head>
    16. <body>
    17. <form id="form">
    18.     <input type="file" name="file[]" multiple>
    19.     <input type="file" name="file[]" multiple>
    20.     <input type="text" id="test" name="test" value="Hello word!">
    21.     <input type="submit" name="Upload">
    22. </form>
    23. <pre id="result">no result</pre>
    24. <script type="text/javascript">
    25. $(function() {
    26.     $( "#form" ).submit(function( event ) {
    27.  
    28.   var formData = new FormData($('#form').get(0));
    29.   formData.append('custom', 'hello custom');
    30. /*
    31.   // manual
    32.     var formData = new FormData();
    33.  
    34.     formData.append('test', $("#test").val());
    35.  
    36.     $.each( $("#form input[type=file]"), function( input_key, input_value ) {
    37.         $.each( input_value.files, function( file_key, file_value ) {
    38.             formData.append('file[]', file_value);
    39.         });
    40.     });
    41. */
    42.     var jqxhr = $.ajax({
    43.             method: "POST",
    44.             url: "index.php",
    45.             data: formData,
    46.  
    47.             processData: false,
    48.             contentType: false
    49.         })
    50.         .done(function(data) {
    51.             $("#result").html(data);
    52.         })
    53.         .fail(function() {
    54.             alert( "error" );
    55.         });
    56.  
    57.         event.preventDefault();
    58.     });
    59. });
    60. </script>
    61. </body>
    62. </html>
     
  3. shahin87

    shahin87 Новичок

    С нами с:
    24 фев 2017
    Сообщения:
    3
    Симпатии:
    0
    я не хочу несколько импутов
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @shahin87 оставь один, это пример работы с formData
     
  5. shahin87

    shahin87 Новичок

    С нами с:
    24 фев 2017
    Сообщения:
    3
    Симпатии:
    0
    если я оставлю один, я смогу загружать несколько файлов?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Можно, главное чтобы имя было массивом, например обычно имя это буквы и цифры, а чтобы дать понять что это массив надо добавить [] в конец имени, например myfile[] - вот так должно работать