Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите как сделать мультизагрузку файлов (https://javascript.ru/forum/misc/78126-podskazhite-kak-sdelat-multizagruzku-fajjlov.html)

maiskiykot 30.07.2019 17:27

Подскажите как сделать мультизагрузку файлов
 
Есть скрипт обработки одиночного файла с сокрытием поля input=file. Вопрос: как его доработать, чтобы кидал несколько файлов? В jquery не силен, поэтому застрял. Оригинал кода:

$('button[id^=\'button-upload\']').on('click', function() {
                    var node = this;

                    $('#form-upload').remove();

                    $('body').prepend('<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input type="file" name="file" multiple="true"/></form>');

                    $('#form-upload input[name=\'file\']').trigger('click');

                    $('#form-upload input[name=\'file\']').on('change', function() {
                            $.ajax({
                                    url: 'index.php?route=information/contact/upload',
                                    type: 'post',
                                    dataType: 'json',
                                    data: new FormData($(this).parent()[0]),
                                    cache: false,
                                    contentType: false,
                                    processData: false,
                                    beforeSend: function() {
                                            $(node).button('loading');
                                    },
                                    complete: function() {
                                            $(node).button('reset');
                                    },
                                    success: function(json) {
                                            $('.text-danger').remove();

                                            if (json['error']) {
                                                    $(node).parent().find('input').after('<div class="text-danger">' + json['error'] + '</div>');
                                            }

                                            if (json['success']) {
                                                    alert(json['success']);
                                                    $(node).parent().find('.success').html(json['file']);
                                                    $(node).parent().find('input').attr('value', json['file']);
                                            }
                                    },
                                    error: function(xhr, ajaxOptions, thrownError) {
                                            alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                                    }
                            });
                    });
            });

Malleys 30.07.2019 18:27

Я так понимаю, что на стороне сервера PHP. Если так, то в 6-ой, 8-ой и 10-ой строчках замените name="file" на name="file[]". На стороне сервера обработайте $_FILES.

maiskiykot 30.07.2019 19:22

Да с пыхом разберусь. Мне главное - jqery победить. Сам скрипт кидает ссылку на файл в хтмл. С вашей правкой он все файлы выложит?

maiskiykot 30.07.2019 19:35

Цитата:

Сообщение от Русский (Сообщение 510936)
Это очень легко. Выкинь его на помойку и

Я бы с удовольствием, но здесь бюджет не тот для писания скрипта с нуля. А про 6-ю строчку - там ведь идет подмена скрытого поля и включено multiple. Точно нужно там поставть file[]?

Malleys 30.07.2019 19:42

Цитата:

Сообщение от maiskiykot
Точно нужно там поставть file[]?

Да, только тогда на сервере можно обработать много файлов, если у вас на стороне сервера PHP! Если просто file, то в $_FILES будет только 1 файл, а если file[], то в $_FILES будут все файлы! Какой баг в PHP!

В 6-ой, 8-ой и 10-ой строчках добавьте!

maiskiykot 31.07.2019 22:30

Это opencart к тому же. Неохота пилить пол-опенкарта для исправления его чудес


Часовой пояс GMT +3, время: 07:16.