[ICMS2] Сохранение данных из базы данных в файл на ПК пользователя

 
Посетитель
small user social cms
Медаль
Сообщений: 375
Уважаемые Гуру!
Помогите разобраться с проблемой.

Задача.
Взять данные из базы данных, записать их в файл нужным форматом и выдать его пользователю для сохранения на компьютере.
Для простоты назовем его экшином "SAVE"

Вроде все сделал, а на последнем этапе - затык.
После появления окна для выбора места куда сохранить файл, файл сохраняется как положено, а вот вместо того, чтобы по логике компонент должен вернулся туда откуда был запущен экшин "SAVE" - на окне крутиться AJAX-круг и все.
Такое ощущение что AJAX не может получить данные для перерисовке страницы.

Как полечить?

кусок кода аction
Редактировалось: 3 раз (Последний: 4 января 2015 в 11:34)
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
Медаль
Сообщений: 375
Ребят, не уж то не кто не поможет?
Мозг уже не соображает :(
Обожаю вторую ветку! Взрыв мозга!
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 375
Нашел я вроде место где все портиться.
Вообщем вот в этом куске кода:
Код PHP:
  1.  
  2. header('Content-Description: File Transfer');
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename=' . basename($file_temp));
  5. header('Content-Transfer-Encoding: binary');
  6. header('Expires: 0');
  7. header('Cache-Control: must-revalidate');
  8. header('Pragma: public');
  9. header('Content-Length: ' . filesize($file_temp));
  10.  
портиться основной заголовок.
И когда идет попытка редирекнуться куда надо, в заголовке черти что.
Помогите найти где эти значения и подсмотреть какие они должны быть - эти значения.
Например в NetBeans-е можно глянуть их значения перед тем как я их начинаю "портить"?
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
Медаль
Сообщений: 350
Завершить ajax запрос можно exit;
Системное прерывание ajax ICMS это $this->halt();
Код PHP:
  1. // заставляем браузер показать окно сохранения файла
  2. header('Content-Description: File Transfer');
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename=' . basename($file));
  5. header('Content-Transfer-Encoding: binary');
  6. header('Expires: 0');
  7. header('Cache-Control: must-revalidate');
  8. header('Pragma: public');
  9. header('Content-Length: ' . filesize($file));
  10. // читаем файл и отправляем его пользователю
  11. readfile($file);
  12. exit;
  13.  
Посетитель
small user social cms
Медаль
Сообщений: 375
Геннадий Иванович, пробовал. Не выходит аленький цветочек.
Тут в самой системе наткнулся на кусок кода который отвечает за загрузку файлов.
Но все равно пока не получается им воспользоваться. :(

Александр, да причем тут вирусы? rofl Ещё и нод32 предлагать... Ну Вы даете. Я врагу своему не пожелаю такой псевдоантивирус.
Да и ещё - я в "песочнице" сижу. Так что вирусы тут не причем.
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
Медаль
Сообщений: 375
Вот нашел функцию в самом движке
Код PHP:
  1.  
  2. public function actionDownload($id, $url_key){
  3.  
  4. if (!$id || !$url_key) { return cmsCore::error404(); }
  5.  
  6. $file = $this->model->getFile($id);
  7.  
  8. if ($file['url_key'] != $url_key) { cmsCore::error404(); }
  9.  
  10. $filename = cmsConfig::get('upload_path') . $file['path'];
  11. $original_filename = $file['name'];
  12.  
  13. $this->model->incrementDownloadsCounter($file['id']);
  14.  
  15. header("Content-Type: application/force-download");
  16. header("Content-Length: " . filesize($filename));
  17. header('Content-Disposition: attachment; filename="' . $original_filename . '"');
  18.  
  19.  
  20. readfile($filename);
  21.  
  22. $this->halt();
  23.  
  24. }
  25.  
Вроде практически как у меня. Да я уже и его выдрал и пытаюсь им "выдать" файл пользователю.
Файл сохраняется - но перенаправления не происходит.
Крутиться иконка ajax и все.
Помогает только обновление страницы :(
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1402
Скорпион, но ведь в функции actionDownload нет редиректа, может стоить в код добавить $this->redirectBack(); ?
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 375
Evanescence, как не редиректится?
а - $this->redirectToAction('');
В первом сообщении.....

P.S. Попробовал и Ваш вариант - неа :(
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
Медаль
Сообщений: 375
все таки думаю все дело в заголовках которые назначаются header (). Где бы увидеть их значение во время работы?
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1402
Скорпион, не обратил внимание на actionMypatchPatchSave
тогда может обновиться/перенаправить страницу с помощью js если в вашем компоненте есть tpl файл, например так:
Код PHP:
  1. document.location.href = "СТРАНИЦА_ПЕРЕНАПРАВЛЕНИЯ"}
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1402
Скорпион:
Где бы увидеть их значение во время работы?
В хроме
[ICMS2] Сохранение данных из базы данных в файл на ПК пользователя
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 375
Evanescence, есть.
patchs.tpl.php
Только вот не пойму куда его тут пихать.
Обожаю вторую ветку! Взрыв мозга!
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 187
Скорпион, извиняюсь не туда)) написал (странной очень как суда именно попало, наверное судьба!)
Уважаемый, а почему довольно хороший и надежный антивирус вы считаете псевдо? потому, что он делается не у нас(точнее у Вас в Стране,
.
)? или простое не доверие к нему(чувствуется не объективность и предвзятость)))
Я вот лично бы лучше поставил например 100 раз нод32 чем тот же бесплатный аваст smile и многие другие (да и сорри, что оффтоп и не по теме)
Посетитель
small user social cms
Медаль
Сообщений: 375
Александр, ответил в личку.
По делу есть что сказать? Голова совсем не соображает у мну :(
Обожаю вторую ветку! Взрыв мозга!
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1350
Скорпион, вы не можете отдать пользователю файл и сделать редирект одновременно в рамках одного запроса.
Либо то, либо другое.
Если принципиально чтобы файл загружался не в том месте, где нажали "Сохранить", а на другой странице, то нужно сначала перейти на эту страницу, а затем уже вызывать URL отдающий файл. Как это сделано здесь.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: