php - quantum - ¿Cómo puedo obtener un archivo csv para descargar en IE? Funciona en Firefox
importar marcadores firefox json (12)
¿Has probado el tipo de contenido: text / csv?
Estoy luchando con un extraño error. Tengo una aplicación web simple que toma cosas de un DB y luego las emite como un archivo descargable csv. Funciona en Firefox y Chrome, pero IE no lo reconoce como un archivo csv (pensando que es un archivo html) y cuando hago clic en guardar aparece el error "No se puede descargar {nombre del archivo} de {nombre del sitio} . Incapaz de abrir este sitio de internet ... "
Código:
session_start();
//some logic goes here...
//generate csv header
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=exportevent.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "Event: " . $event_title . "/n";
//print the column names
echo "Last Name, First Name, Company /n";
while($row = mysql_fetch_assoc($result))
{
echo $row[''atlname''] . '','' . $row[''atfname''] . '','' . $row[''atcompany''] . "/n";
}
He jugado con el tipo de contenido un montón, pero eso no tuvo ningún efecto.
Actualización: He intentado text / csv, application / vnd.ms-excel (y variaciones de esto), text / plain, y algunos otros que ahora olvido sin suerte.
Esto es IE8 por cierto.
Actualización 2: la conexión es a través de SSL.
¿No nos encanta IE? :)
Intenta usar esos encabezados:
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=/"exportevent.csv/";" );
header("Content-Transfer-Encoding: binary");
Creo que el tipo de contenido de secuencia de octetos obliga a IE a descargar el archivo.
Acabamos de tener el mismo problema y después de agregar muchos encabezados y obtener un enlace de trabajo, los eliminé uno por uno y encontré que la clave para nosotros era "Cache-Control: public", así que al final acabamos de tener
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=some_filename.csv");
que funcionó bien
Después de usar Javascript, resolverá su problema.
Use esto para IE,
var IEwindow = window.open();
IEwindow.document.write(''sep=,/r/n'' + CSV);
IEwindow.document.close();
IEwindow.document.execCommand(''SaveAs'', true, fileName + ".csv");
IEwindow.close();
Para obtener más información, he escrito un tutorial sobre eso, consulte - Descargar datos JSON en formato CSV Soporte de navegador cruzado
Espero que esto sea útil para ti.
El único código adicional que tuve que agregar para que IE funcione con SSL fue: header("Pragma: public");
Así que mis encabezados se ven así ahora:
header("Pragma: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=some_filename.csv");
Esto simplemente no tiene sentido. Probé la respuesta aceptada, todas las otras respuestas aquí, y no funcionó para mí. Probé sus permutaciones, y de alguna manera logré que funcionara en IE así:
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Type: application/vnd.ms-exce");
header("Content-Disposition: attachment; filename=coupons.csv" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . strlen($csv));
echo $csv;
die();
Una cosa que hice es vaciar el caché cada vez que pruebo el código. Y todavía no tiene sentido. En caso de que alguien lo necesite desesperadamente;)
Hace algún tiempo tuve un problema con IE6 al abrir archivos PDF, y colgar cuando AdobeReader 6.0 se instaló e intenté abrir el archivo en la ventana del navegador. Que encontré en algún lugar este encabezado:
header(''Content-Type: application/force-download'');
Y resolvió el problema, todos los archivos pdf se descargaron y abrieron en Adobe en lugar de IE.
Intente configurar su tipo de contenido en text/csv
lugar de application/octet-stream
.
Dado que application / octet-stream es un tipo de mime binario genérico (y no coincide con la extensión ''.csv''), Internet Explorer podría ignorarlo y calcular el tipo de mime basado en la extensión del archivo.
La solución para mí fue:
header_remove();
header(''Content-Type: text/csv'');
header(''Content-Disposition: attachment; filename=brokerlist.csv'');
echo $content;
Recientemente nos encontramos con este problema. Ver este artículo de MSKB
Estos son los encabezados que terminamos teniendo que usar para que funcione a través de SSL.
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=/"$file_name/";");
header("Content-length: " . strlen($csv_string));
Si intenta realizar esta tarea (obtener un archivo CSV para descargar en IE8) utilizando Salesforce.com (en cuyo caso su front-end es Visualforce y no puede establecer todos los encabezados, solo algunos), aquí está Que necesitas:
<apex:page cache="true"
contentType="application/octet-stream#myAwesomeFileName.csv"
showHeader="false" sidebar="false" standardStylesheets="false">
<apex:outputText value="{!csvContent}" escape="false"/>
</apex:page>
Las piezas clave aquí son cache=true
, que, junto con el atributo expires=0
predeterminado, logra los siguientes encabezados:
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
Y luego el contentType
de application/octet-stream
--- doing text/csv
falla para IE8.
Tuve éxito con lo siguiente:
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=File.csv");
Establecer el tipo de aplicación / vnd.ms-excel parecía hacer el truco en mi caso. Todo esto está en un archivo que se abre al enviar un formulario usando
target="_blank"