Показать сообщение отдельно
  #3 (permalink)  
Старый 04.09.2010, 14:12
Новичок на форуме
Отправить личное сообщение для doom_man Посмотреть профиль Найти все сообщения от doom_man
 
Регистрация: 04.09.2010
Сообщений: 3

Сообщение от subzey Посмотреть сообщение
Чтобы браузер предложил скачать фаил, а не открыл его, нужно отдать его с http-заголовком
Код:
Content-Disposition: attachment
либо
Код:
Content-Disposition: attachment; filename=my_file.tar.gz
Во втором случае браузер предложит сохранить его именно с таким именем.

Все это делается на сервере, естесственно.
Да, это я уже в гугле вычитал, написал даже уже не большую функцию на php, которая делает правильные заголовки, но обратите внимания, в моем коде я делаю AJAX запрос методом POST, с указанием формата данных JSON и функцией обратного вызова. Т.е. в данном примере если я на стороне сервера скажем сделаю так:

header('Pragma: public');  // required 
header('Expires: 0');  // no cache 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_name)).' GMT');
header('Cache-Control: private',false);
header("Content-Type: application/zip\n");
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file_name));
header('Connection: close');
readfile($file_name);


То в браузер почему то этого не понимает, хотя если я сделаю GET\POST к серверному файлу в ручную, то браузер нормально понимает этот HTTP заголовок.

Да и кроме того в моем случае в ответе от сервера (в формате JSON), существует еще дополнительная информация кроме как ссылка на файл.

Хотя я тут сейчас подумал, может быть действительно сделать дополнительную обработку данных с сервера, и отдельный сценарий на сервере который принимал бы данные о файле в GET-е отдавал их на скачку(как-нибудь в так: window.location = 'get_file.php?filename=XXXX.zip', т.е. что бы не использовать AJAX вызов ), после чего удалял бы.
Ответить с цитированием