Domanda

Stavo cercando di implementare un "link per il download" e metterlo accanto a uno dei miei tabella di report in modo che gli utenti possono scaricare un file CSV e aprirlo con applicazioni come Excel.

I record vengono generati dinamicamente in base alla richiesta fatta dagli utenti.

Quindi, da qualche parte nel mio controller c'è qualcosa di simile:

response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)

Questo funziona sia in Firefox e Chrome, ma non riesce in IE.

Quando stampo le intestazioni di risposta, ho scoperto che diverse intestazioni sono stati aggiunti alla mia risposta da web2py: 'Scade', 'Cache-Control', ecc ...

E quando rimuovo l'intestazione 'Cache-Control' nel modo seguente:

del response.headers['Cache-Control']

Si lavora in IE.

Così sembra che IE ha problemi ad affrontare un file scaricabile con il set 'Cache-Control' per certo valore.

Ora, la mia domanda è:

  • Perché web2py aggiungere queste intestazioni di risposta, implicitamente? e forse senza un modo per metterlo fuori?

  • non v'è alcun effetto collaterale quando elimino l'intestazione 'Cache-Control' in questo modo?

Grazie in anticipo.

È stato utile?

Soluzione

Non sono sicuro di quello che le intestazioni di controllo della cache sono / erano stati inviati, ma IE ha un bug con i file scaricati, come si sta verificando.

Per IE, è necessario abilitare la cache . Quando IE carica i file (ad esempio i file di Excel), in Excel, li carica dalla directory della cache, quindi se non si memorizza nella cache, Excel (o l'altra applicazione) non riuscirà a caricare il file.

Eric Law (MSFT) sul tema: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no- cache.aspx

Aggiorna : Se invece si desidera solo per forzare il download ... per esempio non ha IE caricare il file di Excel all'interno della finestra di IE ... quindi assicuratevi di impostare le intestazioni complete per l'allegato.

//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');

Altri suggerimenti

È il link per il download tramite HTTPS (SSL)? Se è così, allora IE non può gestire il download se è impostato per essere memorizzati nella cache. Questo è un problema noto con IE.

Questo non risponde alla tua domanda, ma risolve, spero, problema originale.

Vorrei solo aggiungere timestamp (qualcosa di abbastanza unico) per interrogare serie di link per file CSV. Mi ha aiutato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top