Panda58dev Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 Здравствуйте! Есть задача - нужно, что бы на сервере формировался файл, который мог бы скачать пользователь, этим занимается отдельный метод в контроллере, который вызывается посредством AJAX запроса. На "Хабр Q&A" решение подобной задачи уже есть. Проблема заключается в том, что оно по какой то причине не работает - все заголовки отправляются, на фронт всё приходит, но вот файл никакой не качается. Скрины с ответом сервера и кодом прилагаю. Пробовал ответ сервера делать через "echo" - результат точно такой же. Надіслати Поділитися на інших сайтах More sharing options...
spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 аяксом надо формировать ссылку на файл и открывать его в новой вкладке Надіслати Поділитися на інших сайтах More sharing options... stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 через ajax нельзя качать файл, но можно сделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами exportCompilation({state}) { this.$axios({ url: `/api/${state.compilation.id}/export`, method: 'GET', responseType: 'blob' }).then(response => { let fileURL = window.URL.createObjectURL(new Blob([response.data])) let fileLink = document.createElement('a') fileLink.href = fileURL fileLink.setAttribute('download', state.compilation.name + '.xlsx') document.body.appendChild(fileLink) fileLink.click() }) }, 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:50, spectre сказал: аяксом надо формировать ссылку на файл и открывать его в новой вкладке Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 17:58, Panda58dev сказал: Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. тогда не аякс Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, spectre сказал: тогда не аякс А как отправлять запрос? Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Надіслати Поділитися на інших сайтах More sharing options... stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 (змінено) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообще не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Змінено 6 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Blast Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 контроллер $data = 'данные текстового файла'; $json['datafile'] = 'data:text/plain;base64,' . base64_encode($data); $json['filename'] = 'file.txt'; $this->response->setOutput(json_encode($json)); вьюха <a href="" id="dataFromFile" style="display: none;" download="">save</a> ... <script> ... success: function(json) { $('#dataFromFile').attr('href', json['datafile']).attr('download', json['filename']); document.getElementById("dataFromFile").click(); } ... </script> 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Ответ сервера - файл для скачивания. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 через ajax нельзя качать файл, но можно сделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами exportCompilation({state}) { this.$axios({ url: `/api/${state.compilation.id}/export`, method: 'GET', responseType: 'blob' }).then(response => { let fileURL = window.URL.createObjectURL(new Blob([response.data])) let fileLink = document.createElement('a') fileLink.href = fileURL fileLink.setAttribute('download', state.compilation.name + '.xlsx') document.body.appendChild(fileLink) fileLink.click() }) }, 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:50, spectre сказал: аяксом надо формировать ссылку на файл и открывать его в новой вкладке Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 17:58, Panda58dev сказал: Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. тогда не аякс Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, spectre сказал: тогда не аякс А как отправлять запрос? Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Надіслати Поділитися на інших сайтах More sharing options... stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 (змінено) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообще не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Змінено 6 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Blast Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 контроллер $data = 'данные текстового файла'; $json['datafile'] = 'data:text/plain;base64,' . base64_encode($data); $json['filename'] = 'file.txt'; $this->response->setOutput(json_encode($json)); вьюха <a href="" id="dataFromFile" style="display: none;" download="">save</a> ... <script> ... success: function(json) { $('#dataFromFile').attr('href', json['datafile']).attr('download', json['filename']); document.getElementById("dataFromFile").click(); } ... </script> 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Ответ сервера - файл для скачивания. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:50, spectre сказал: аяксом надо формировать ссылку на файл и открывать его в новой вкладке Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. Надіслати Поділитися на інших сайтах More sharing options...
spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 17:58, Panda58dev сказал: Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. тогда не аякс Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, spectre сказал: тогда не аякс А как отправлять запрос? Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Надіслати Поділитися на інших сайтах More sharing options... stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 (змінено) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообще не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Змінено 6 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Blast Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 контроллер $data = 'данные текстового файла'; $json['datafile'] = 'data:text/plain;base64,' . base64_encode($data); $json['filename'] = 'file.txt'; $this->response->setOutput(json_encode($json)); вьюха <a href="" id="dataFromFile" style="display: none;" download="">save</a> ... <script> ... success: function(json) { $('#dataFromFile').attr('href', json['datafile']).attr('download', json['filename']); document.getElementById("dataFromFile").click(); } ... </script> 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Ответ сервера - файл для скачивания. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Надіслати Поділитися на інших сайтах More sharing options...
Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, spectre сказал: тогда не аякс А как отправлять запрос? Надіслати Поділитися на інших сайтах More sharing options...
spectre Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Надіслати Поділитися на інших сайтах More sharing options... stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 (змінено) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообще не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Змінено 6 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Blast Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 контроллер $data = 'данные текстового файла'; $json['datafile'] = 'data:text/plain;base64,' . base64_encode($data); $json['filename'] = 'file.txt'; $this->response->setOutput(json_encode($json)); вьюха <a href="" id="dataFromFile" style="display: none;" download="">save</a> ... <script> ... success: function(json) { $('#dataFromFile').attr('href', json['datafile']).attr('download', json['filename']); document.getElementById("dataFromFile").click(); } ... </script> 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Ответ сервера - файл для скачивания.
stickpro Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 (змінено) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообще не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Змінено 6 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Blast Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 контроллер $data = 'данные текстового файла'; $json['datafile'] = 'data:text/plain;base64,' . base64_encode($data); $json['filename'] = 'file.txt'; $this->response->setOutput(json_encode($json)); вьюха <a href="" id="dataFromFile" style="display: none;" download="">save</a> ... <script> ... success: function(json) { $('#dataFromFile').attr('href', json['datafile']).attr('download', json['filename']); document.getElementById("dataFromFile").click(); } ... </script> 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Panda58dev Опубліковано: 6 березня 2022 Автор Share Опубліковано: 6 березня 2022 (змінено) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообще не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Змінено 6 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options...
Blast Опубліковано: 6 березня 2022 Share Опубліковано: 6 березня 2022 контроллер $data = 'данные текстового файла'; $json['datafile'] = 'data:text/plain;base64,' . base64_encode($data); $json['filename'] = 'file.txt'; $this->response->setOutput(json_encode($json)); вьюха <a href="" id="dataFromFile" style="display: none;" download="">save</a> ... <script> ... success: function(json) { $('#dataFromFile').attr('href', json['datafile']).attr('download', json['filename']); document.getElementById("dataFromFile").click(); } ... </script> 1 Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options... Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2
Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) @Blast угу, то есть, я генерирую ссылку для скачивания и записываю всю строку в url? Сделал почти так же как в Вашем примере, но выполняется .error хотя код ответа 200, разумеется подумал на ошибки PHP, но в журнале ошибок нет, error_get_last() тоже возвращает пустоту. Странное дело. Контроллер: public function getTplFile(){ if (isset($this->request->post['tpl_name'])) { $this->load->model('user/users_perm_plus'); // $data = $this->model_user_users_perm_plus->getTplPermData($this->request->post['tpl_name']); // (array) $data // $data['tpl_name'] = $this->request->post['tpl_name']; $data = 'test'; $file_name = 'upp_tpl_' . $this->request->post['tpl_name'] . '.json'; $file_data = 'data:text/plain;base64,' . base64_encode($data); $json['file_name'] = $file_name; $json['file_data'] = $file_data; $this->response->addHeader('Content-Type: text/plain'); $this->response->addHeader('Content-Disposition: attachment; filename="' . $file_name . '"'); $this->response->setOutput(json_encode($json)); // $error = error_get_last(); // $this->response->setOutput($error); } } AJAX: function getTplFile(tpl_name) { $.ajax({ url: '<?php echo $link_to_getTplFile; ?>&token=<?php echo $token; ?>', method: 'POST', dataType: 'text/plain', data: { tpl_name: tpl_name }, beforeSend: function () { $('.panel-title').html('<i class="fa-green fa fa-spinner fa-pulse fa-3x fa-fw"></i><?php echo $text_loading; ?>'); }, complete: function () { $('.panel-title').html('<i class="fa fa-table"></i>'); }, success: function(json) { console.log(json); $('#tpl-file-link').attr('href', json['file_data']).attr('download', json['file_name']); document.getElementById("tpl-file-link").click(); }, error: function (error) { console.log(error); } }); } Ответ сервера: Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options...
Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 (змінено) Хм, похоже у меня какие то проблемы с dataType. Сейчас везде поставил json но в url почему то там где должно быть содержимое файл стоит [object%20Object] Вообще сейчас я путаюсь, что куда мне нужно кодировать json в base64 или наоборот. В результате мне нужен json массив в файле... Змінено 7 березня 2022 користувачем Panda58dev Надіслати Поділитися на інших сайтах More sharing options...
Panda58dev Опубліковано: 7 березня 2022 Автор Share Опубліковано: 7 березня 2022 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts