Показать сообщение отдельно
  #1 (permalink)  
Старый 06.07.2012, 09:54
Интересующийся
Отправить личное сообщение для Stanisov Посмотреть профиль Найти все сообщения от Stanisov
 
Регистрация: 03.01.2012
Сообщений: 17

AJAX + PHP загрузка файлов с сервера
Добрый день!
Много сейчас реализовано решений для AJAX загрузки файлов на сервер. Но чтобы скачать файл с сервера - информации нигде не встречал
Вообщем у меня есть рабочий вариант реализации AJAX , но файл он не скачивает а отображает его содержимое в консоле как txt.

Файл ajax.js
$(function() // объявляем глобальную функцию готовности DOM
{
    $('button#getfile').live('click', function() // Выкачиваем AJAX'ом сгенерированный CSV файл
    {
        $.get('/?getfile', function(){}); // коннектим к AJAX обработчику
    });
});


Файл обработчик getfile.php
<?php 
if($core->isAjax() && isset($_REQUEST['getfile'])) // если AJAX верный
{
	$core->getFILE(); // генерируем файл
	$core->getCSV(); // выдаем CSV в браузер моментально
}?>


Методы вызываемые выше - core.class.php
<?php
public function getCSV() // метод для загрузки CSV
	{
		$filename = SITEROOT."data-".date('d-m-Y').".".FILEEXT;
		$filenameroot = PATHFILE."data-".date('d-m-Y').".".FILEEXT;
		header('Content-type: application/octet-stream');
		header('Content-Disposition: attachment; filename="'.$filename.'"');
		header('Content-Transfer-Encoding: binary');
		readfile($filename);
		unlink($filenameroot);
	}

	public function getFILE() // метод генерации исходящего файла
	{
		$sql = "SELECT cat.category_name AS category, sub.category_name AS subcategory
FROM `".DBPREFIX."_categories` cat
RIGHT JOIN ".DBPREFIX."_subcategories sub ON sub.category_id = cat.category_id INTO OUTFILE '".PATHFILE."data-".date('d-m-Y').".".FILEEXT."'";
		try
		{
			$this->db->query($sql);
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();
			return false;
		}
	}?>


Как видно выше, файл получаю в бинарном режиме. В браузере заголовок ответа выглядит следующим образом:
Код:
Connection	Keep-Alive
Content-Disposition	attachment; filename="http://www.vertical.local/data/data-06-07-2012.csv"
Content-Length	3392
Content-Type	application/octet-stream
Date	Fri, 06 Jul 2012 05:48:14 GMT
Keep-Alive	timeout=5, max=100
Server	Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By	PHP/5.3.8
content-transfer-encoding	binary
Ответить с цитированием