Принудительно скачать файл - PullRequest
0 голосов
/ 27 января 2012

Я написал скрипт, который добавляет данные в уже существующий CSV-файл.Он работает нормально и для других пользователей, но для одного пользователя файл недоступен для загрузки, открывается только в браузерах.

Заголовок, используемый при записи в файл:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"file.csv\";" );
header("Content-Transfer-Encoding: binary");

Я отправляю некоторого пользователявыберите ajax и, когда он будет готов, перейдите к файлу.

 $.get( urlJson ,function(){

     document.location.href = urlCsv;

  });

Я думаю, что это проблема с сервером, может быть, что-то не включено, но я не знаю, что именно.

Ответы [ 3 ]

1 голос
/ 27 января 2012

Это должно сделать это

<?php

$file = "data.csv";

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=".$file);
header("Content-Description: File Transfer"); 
@readfile($file); 

?>
0 голосов
/ 27 января 2012

Подобно тому, что сказал @Walkerneo ... Однако некоторые версии Internet Explorer предпочитают выбирать, что они делают с application/octet-stream.Например, на одном из моих сайтов IE всегда открывал mp3-файлы в медиаплеере.Решением было добавить AddType mycompany/podcast mp3 в файл .htaccess.Любой выдуманный тип, подобный этому, заставит IE явно загружать.

0 голосов
/ 27 января 2012

Принудительная загрузка с помощью PHP в самом простом виде -

 header("Content-Description: File Transfer");
 header("Content-Disposition: attachment; filename=THEFILENAME");
 header("Content-Type: application/THEFILETYPE");
 header("Content-Transfer-Encoding: binary");

Возможно, пользовательский браузер просто игнорирует запрос на загрузку файла (так как это зависит от браузера, что делать) или возможно он не знает, что такое application / octet-stream.

У вас есть еще информация?

CSV может представлять собой «текст / запятые-значения, текст / CSV, приложение / CSV», так как это MIME, вы пробовали это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...