За последние 24 часа нас посетили 17645 программистов и 1669 роботов. Сейчас ищут 1611 программистов ...

Скачивание файла через форму помогите!

Тема в разделе "JavaScript и AJAX", создана пользователем New_neo, 4 окт 2017.

  1. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Здравствуйте! Помогите пожалуйста. Есть форма с чекбоксами, которую перехватывает js по клику отправка формы.
    Код (Text):
    1. $(document).on('click', '#download', function (e) {
    2.         e.preventDefault();
    3.         var res = [];
    4.         $.each($('input[type=checkbox]:checked'), function () {
    5.             res.push($(this).parent().find('input[type=text]').attr('data-id'));
    6.         });
    7.         var data = {
    8.             action: 'downloadForm',
    9.             download: res,
    10.         };
    11. })
    Тут я получаю массив файлов которые нужно скачать.
    Только вот как скачать не могу никак реализовать - помогите. Спасибо!
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Откуда скачать?
     
  3. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    С сервера! Там в массиве уже приходят урлы с файлами
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Замечтательно... Будем продолжать играть в угадай мелодию:
    1. С вашего сервера вам нужно отдать файлы на скачивание пользователю?
    2. С чужого сервера вам нужно скачать указанные фалы к себе на сервер?
    3. Свой вариант
     
  5. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Просто скачивание файлов! Файлы уже на сервере. Есть реализация типа <a href="1.jpg" download>Скачать файл</a>?
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Попробуйте использовать библиотеку JSZip. Даже в примерах, у них есть вариант похожий на ваш случай
     
  7. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    А по проще? Смысл такой. Есть форма в которой уже указаны пути на файл (Они в чекбоксах), далее по нажатию на кнопку JS получает массив этих файлов с сервера далее нужно предложить клиенту их сохранить на пк
     
  8. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Отдать один файл на скачивание - не очень большая проблема и есть разные варианты это реализовать. Но вам, насколько я вижу, нужно отдавать несколько файлов, а без их архивирования, лично я, вариантов не вижу. В принципе, можно отправить массив данных на сервер (тем же ajax-ом), там собрать архив с файлами, вернуть ссылку на этот архив. А дальше дело за малым: window.location = 'path/to/archive.zip'; или создать элемент <a> (может даже с атрибутом download) и программно выполнить на этом элементе клик и т.д.
     
  9. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Вообще не вариант.
     
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Если JSZip для вас сложно, а вариант с упаковкой архива на сервере "вообще не вариант", то у вас один путь - отказаться от вашей затеи, т.к. другие способы будут еще более сложными.
     
  11. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Всем спасибо! Все получилось!
    Код (Text):
    1. $(document).on('click', '#download', function (e) {
    2.         e.preventDefault();
    3.         var res = [];
    4.         $.each($('input[type=checkbox]:checked'), function () {
    5.             res.push($(this).parent().find('input[type=text]').attr('data-id'));
    6.         });
    7.         function downloadAll(urls) {
    8.             var link = document.createElement('a');
    9.  
    10.             link.setAttribute('download', null);
    11.             link.style.display = 'none';
    12.  
    13.             document.body.appendChild(link);
    14.  
    15.             for (var i = 0; i < urls.length; i++) {
    16.                 link.setAttribute('href', urls[i]);
    17.                 link.click();
    18.             }
    19.             document.body.removeChild(link);
    20.         }
    21.         downloadAll(res);
    22. })