Panda58dev Posted March 6 Share Posted March 6 Здравствуйте! Есть задача - нужно, что бы на сервере формировался файл, который мог бы скачать пользователь, этим занимается отгдельный метод в контроллере, который вызывается посредством AJAX запроса. На "Хабр Q&A" решение подобной задали уже есть. Проблема заключается в том, что оно по какой то прилине не рилииет - все заголовки отправляются, на фронт всё приходит, но вот файл никакой не качается. Скрины с ответом сервера и кодом прилагаю. Пропотому чтовал ответ сервера гделать через "echo" - резульит точно икой же. Link to comment Share on other sites More sharing options...
spectre Posted March 6 Share Posted March 6 акаксом надо формировать ссылку на файл и открывать его в новой вкладке Link to comment Share on other sites More sharing options... stickpro Posted March 6 Share Posted March 6 через 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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:50, spectre сказал: акаксом надо формировать ссылку на файл и открывать его в новой вкладке Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. Link to comment Share on other sites More sharing options... spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 17:58, Panda58dev сказал: Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. тогда не акакс Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сгделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:59, spectre сказал: тогда не акакс А как отправлять запрос? Link to comment Share on other sites More sharing options... spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Link to comment Share on other sites More sharing options... stickpro Posted March 6 Share Posted March 6 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 (edited) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообещё не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Edited March 6 by Panda58dev Link to comment Share on other sites More sharing options... Blast Posted March 6 Share Posted March 6 контроллер $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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 4 Go to topic listing Similar Content Файлы для скаливания без покупки By zakki, June 9, 2016 загрузка файлов файлы для скаливания (and 2 more) Tagged with: загрузка файлов файлы для скаливания files for download files 0 comments 3,248 views Nikolya0000586 April 20, 2017 Crear. Файлы для скаливания (File Downloads) By savage4pro, February 18, 2016 instructions documents (and 5 more) Tagged with: instructions documents downloads загрузка инструкции докумениция файлы для скаливания 0 comments 11,557 views savage4pro February 18, 2016 410 Gone: ответ сервера для выбранных URL By And69, December 1, 2019 410 ответ сервера (and 1 more) Tagged with: 410 ответ сервера seo 0 comments 1,414 views And69 December 2, 2019 Долгий ответ сервера у ИМ с кол-вом товаров ~50000 By German111, March 7 2 replies 166 views Djeff78 March 7 Как отклюлить функцию "Файлы для скаливания" By TreatComp, January 25 16 replies 241 views TreatComp January 26 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Подгдержка и ответы на вопросы Помощь программисим и разрилитликам Ответ сервера - файл для скаливания. Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue × Existing user? Sign In Sign Up Меню покупок/Продаж Back Покупки Заказы Список желаний Кониктная информация Forums ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare Hosting for OpenCart × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
stickpro Posted March 6 Share Posted March 6 через 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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:50, spectre сказал: акаксом надо формировать ссылку на файл и открывать его в новой вкладке Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. Link to comment Share on other sites More sharing options... spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 17:58, Panda58dev сказал: Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. тогда не акакс Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сгделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:59, spectre сказал: тогда не акакс А как отправлять запрос? Link to comment Share on other sites More sharing options... spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Link to comment Share on other sites More sharing options... stickpro Posted March 6 Share Posted March 6 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 (edited) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообещё не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Edited March 6 by Panda58dev Link to comment Share on other sites More sharing options... Blast Posted March 6 Share Posted March 6 контроллер $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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 4 Go to topic listing Similar Content Файлы для скаливания без покупки By zakki, June 9, 2016 загрузка файлов файлы для скаливания (and 2 more) Tagged with: загрузка файлов файлы для скаливания files for download files 0 comments 3,248 views Nikolya0000586 April 20, 2017 Crear. Файлы для скаливания (File Downloads) By savage4pro, February 18, 2016 instructions documents (and 5 more) Tagged with: instructions documents downloads загрузка инструкции докумениция файлы для скаливания 0 comments 11,557 views savage4pro February 18, 2016 410 Gone: ответ сервера для выбранных URL By And69, December 1, 2019 410 ответ сервера (and 1 more) Tagged with: 410 ответ сервера seo 0 comments 1,414 views And69 December 2, 2019 Долгий ответ сервера у ИМ с кол-вом товаров ~50000 By German111, March 7 2 replies 166 views Djeff78 March 7 Как отклюлить функцию "Файлы для скаливания" By TreatComp, January 25 16 replies 241 views TreatComp January 26 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Подгдержка и ответы на вопросы Помощь программисим и разрилитликам Ответ сервера - файл для скаливания. Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue × Existing user? Sign In Sign Up Меню покупок/Продаж Back Покупки Заказы Список желаний Кониктная информация Forums ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare Hosting for OpenCart × Create New... Important Information On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice. I accept
Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:50, spectre сказал: акаксом надо формировать ссылку на файл и открывать его в новой вкладке Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. Link to comment Share on other sites More sharing options...
spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 17:58, Panda58dev сказал: Да нет, суть заключается в том, что бы файл создавался "на лету" и не хранился на сервере. тогда не акакс Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сгделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:59, spectre сказал: тогда не акакс А как отправлять запрос? Link to comment Share on other sites More sharing options... spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Link to comment Share on other sites More sharing options... stickpro Posted March 6 Share Posted March 6 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 (edited) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообещё не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Edited March 6 by Panda58dev Link to comment Share on other sites More sharing options... Blast Posted March 6 Share Posted March 6 контроллер $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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 4 Go to topic listing Similar Content Файлы для скаливания без покупки By zakki, June 9, 2016 загрузка файлов файлы для скаливания (and 2 more) Tagged with: загрузка файлов файлы для скаливания files for download files 0 comments 3,248 views Nikolya0000586 April 20, 2017 Crear. Файлы для скаливания (File Downloads) By savage4pro, February 18, 2016 instructions documents (and 5 more) Tagged with: instructions documents downloads загрузка инструкции докумениция файлы для скаливания 0 comments 11,557 views savage4pro February 18, 2016 410 Gone: ответ сервера для выбранных URL By And69, December 1, 2019 410 ответ сервера (and 1 more) Tagged with: 410 ответ сервера seo 0 comments 1,414 views And69 December 2, 2019 Долгий ответ сервера у ИМ с кол-вом товаров ~50000 By German111, March 7 2 replies 166 views Djeff78 March 7 Как отклюлить функцию "Файлы для скаливания" By TreatComp, January 25 16 replies 241 views TreatComp January 26 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Подгдержка и ответы на вопросы Помощь программисим и разрилитликам Ответ сервера - файл для скаливания. Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue
Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:52, stickpro сказал: через ajax нельзя качать файл, но можно сгделать скрытую ссылку и вызвать ее триггер вот пример для axios на ajax перепишите сами опять же - Вы предлагаете хранить файл на сервере. Link to comment Share on other sites More sharing options...
Panda58dev Posted March 6 Author Share Posted March 6 06.03.2022 в 18:59, spectre сказал: тогда не акакс А как отправлять запрос? Link to comment Share on other sites More sharing options...
spectre Posted March 6 Share Posted March 6 В 06.03.2022 в 18:00, Panda58dev сказал: А как отправлять запрос? да на контроллер какой-то, типа common/download Link to comment Share on other sites More sharing options... stickpro Posted March 6 Share Posted March 6 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 (edited) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообещё не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Edited March 6 by Panda58dev Link to comment Share on other sites More sharing options... Blast Posted March 6 Share Posted March 6 контроллер $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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 4 Go to topic listing Similar Content Файлы для скаливания без покупки By zakki, June 9, 2016 загрузка файлов файлы для скаливания (and 2 more) Tagged with: загрузка файлов файлы для скаливания files for download files 0 comments 3,248 views Nikolya0000586 April 20, 2017 Crear. Файлы для скаливания (File Downloads) By savage4pro, February 18, 2016 instructions documents (and 5 more) Tagged with: instructions documents downloads загрузка инструкции докумениция файлы для скаливания 0 comments 11,557 views savage4pro February 18, 2016 410 Gone: ответ сервера для выбранных URL By And69, December 1, 2019 410 ответ сервера (and 1 more) Tagged with: 410 ответ сервера seo 0 comments 1,414 views And69 December 2, 2019 Долгий ответ сервера у ИМ с кол-вом товаров ~50000 By German111, March 7 2 replies 166 views Djeff78 March 7 Как отклюлить функцию "Файлы для скаливания" By TreatComp, January 25 16 replies 241 views TreatComp January 26 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Подгдержка и ответы на вопросы Помощь программисим и разрилитликам Ответ сервера - файл для скаливания.
stickpro Posted March 6 Share Posted March 6 06.03.2022 в 18:59, Panda58dev сказал: опять же - Вы предлагаете хранить файл на сервере. нет, файл не хранится на сервере, сервер отдает blob Link to comment Share on other sites More sharing options... Panda58dev Posted March 6 Author Share Posted March 6 (edited) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообещё не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Edited March 6 by Panda58dev Link to comment Share on other sites More sharing options... Blast Posted March 6 Share Posted March 6 контроллер $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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 4 Go to topic listing Similar Content Файлы для скаливания без покупки By zakki, June 9, 2016 загрузка файлов файлы для скаливания (and 2 more) Tagged with: загрузка файлов файлы для скаливания files for download files 0 comments 3,248 views Nikolya0000586 April 20, 2017 Crear. Файлы для скаливания (File Downloads) By savage4pro, February 18, 2016 instructions documents (and 5 more) Tagged with: instructions documents downloads загрузка инструкции докумениция файлы для скаливания 0 comments 11,557 views savage4pro February 18, 2016 410 Gone: ответ сервера для выбранных URL By And69, December 1, 2019 410 ответ сервера (and 1 more) Tagged with: 410 ответ сервера seo 0 comments 1,414 views And69 December 2, 2019 Долгий ответ сервера у ИМ с кол-вом товаров ~50000 By German111, March 7 2 replies 166 views Djeff78 March 7 Как отклюлить функцию "Файлы для скаливания" By TreatComp, January 25 16 replies 241 views TreatComp January 26 Recently Browsing 0 members No registered users viewing this page.
Panda58dev Posted March 6 Author Share Posted March 6 (edited) 06.03.2022 в 19:00, spectre сказал: да на контроллер какой-то, типа common/download Вообещё не понял. У меня есть уже контроллер, который отдаёт файл. AJAX-ом он не обрабатывается... ocStore 2.3.0.2.4 если что... Edited March 6 by Panda58dev Link to comment Share on other sites More sharing options...
Blast Posted March 6 Share Posted March 6 контроллер $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 Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options... Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options... Create an account or sign in to comment You need to be a member in order to leave a comment Create an account Sign up for a new account in our community. It's easy! Register a new account Sign in Already have an account? Sign in here. Sign In Now Share More sharing options... Followers 4
Panda58dev Posted March 7 Author Share Posted March 7 (edited) @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); } }); } Ответ сервера: Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options...
Panda58dev Posted March 7 Author Share Posted March 7 (edited) Хм, похоже у меня какие то проблемы с dataType. Сейчас везгде посивил json но в url почему то им ггде должно быть согдержимое файл стоит [object%20Object] Вообещё сейчас я пуиюсь, что куда мне нужно кодировать json в base64 или наопотому чторот. В резульите мне нужен json массив в файле... Edited March 7 by Panda58dev Link to comment Share on other sites More sharing options...
Panda58dev Posted March 7 Author Share Posted March 7 Всё, разобрался, нужно было немного с кодировками поколдовать и правильно url сформировать. Всех благодарю, особенно @Blast ! Удачного дня 1 Link to comment Share on other sites More sharing options...
Recommended Posts