2009-08-13 10 views
7

Ho una pagina aspx con linkbuttons che attivano javascript per aprire una nuova pagina aspx per lo streaming di file nel browser per il download da parte degli utenti.IE 7 bug? - prompt save/open durante il download del file - C# asp.net 3.5

Durante lo sviluppo e il test dell'unità su XP SP3, IE 7 e FireFox 3.5, utilizzando il seguente codice (la chiave è la parte "attachment" nel tag Content-Disposition), entrambi richiedono una finestra di dialogo che chiede se si desidera salvare o aprire il documento, che è esattamente quello che voglio che accada:

 private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format); 
     Response.ContentType = m_mimeType; 
     Response.BinaryWrite(requestFile); 
     Response.Flush(); 

    } 

Quando schiero a un server Windows 2003 e passare alla stessa pagina aspx, FireFox 3.5 chiede correttamente per un opzione Salva/Apri come previsto poiché questa è l'operazione predefinita in FF.

Quando navigo su IE 7 e clicco per scaricare, ottengo una finestra pop-up che è visibile per 1/8 di secondo in alto ... e scompare. Nessuna richiesta di salvataggio/apertura.

Se entro in IE 7 -> Strumenti -> Opzioni Internet -> Protezione -> Livello personalizzato -> Download

Richiesta di conferma automatica per download di file è disabilitato. Quando lo controllo per abilitare i quindi ottenere il prompt Salva/Apri per funzionare correttamente.

Quindi la mia domanda è ..... qualcuno ha trovato un modo per aggirare questo? Ho provato un sacco di cose che la gente sostiene di lavorare con diversi tag di intestazione come cache, pragma, ecc. Ecc., Nessuno di questi aggira il fatto che IE abbia disabilitato la proprietà download per impostazione predefinita.

+0

Ho provato qualcosa di simile e funziona in IE7,8. Puoi fornire il valore esatto del m_mimeType che usi? –

+0

per testare im usando questo come mime e formato nell'elenco parametri "application/pdf", "PDF" –

+0

Hai provato altri ad es. application/zip Qualcosa che IE7 non può visualizzare all'interno della sua finestra. –

risposta

2

Abbiamo riscontrato di recente un problema identico con la nostra implementazione per il download di report generati nel nostro framework web personalizzato. La ricerca ci ha portato a provare lo stesso approccio che hai menzionato (impostazione Content-Disposition).

Il problema è relativo a IE7 e zone di sicurezza. Per impostazione predefinita, determinate azioni DEVONO essere esplicitamente avviate dall'utente. È possibile iniziare guardando Understanding and Working in Protected Mode Internet Explorer e About Window Restrictions

0

Non correlato a questo problema, ma è necessario citare il nome del file nell'output. Gli spazi nel nome del file rovineranno il nome del file durante il download del file.

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\""); 
0

Try This

protected void Button1_Click (object sender, EventArgs e) { Response.ContentType = "application/pdf"; Response.Clear(); Response.TransmitFile ("test.pdf"); Response.End(); }

+0

Se vedi nel mio esempio, il file non proviene dal file system, è una matrice di byte che usa BinaryWrite() per scrivere nel browser. TransmitFile() non funzionerà in questo caso a meno che non assembli fisicamente i file sul sistema. –

1

Se si desidera aggiungere la pagina ai siti attendibili, è possibile scaricare il file. Durante lo sviluppo di tutti i siti che stai utilizzando sono in questa zona.

Si può provare a forzare l'Internet Explorer con l'aggiunta di

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

fino alla fine della vostra richiesta.

Altrimenti si potrebbe provare a pubblicare il collegamento al documento, in modo che il browser visualizzi la richiesta come risposta all'interazione dell'utente.

0

Se non è necessario aprire una nuova pagina utilizzando javascript, è possibile utilizzare un Response.Redirect() alla pagina aspx. Questo dovrebbe aprire la finestra di dialogo salva/apri.

Problemi correlati