Сообщение от 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 вызов ), после чего удалял бы.