2010-09-28 3 views
1

Mon but est de rediriger ou rafraîchir la page en downloding fichier Excel:Url de redirection après clic et le téléchargement d'un fichier

Détails:

Dans ma demande, je vous envoie généré fichier Excel dynamiquement

setContentType("application/vnd.ms-excel; charset=windows-1254"); 
setCharacterEncoding(Constants.ENCODING); 
setHeader("content-disposition", "attachment;filename=" + Constants.DEFAULT_EXCEL_FILE); 
setHeader("Location","http://www.google.com"); 

Mais après avoir demandé à l'utilisateur d'enregistrer ou d'ouvrir le fichier Excel, il n'a pas redirigé vers ex: google.com.

Est-il possible de le faire en partie d'en-tête? Si oui, dites-moi comment.

Merci.

Répondre

0

vous ne pouvez pas rediriger, car vous avez vidé le flux de réponse.

+0

Je pense que vous vouliez dire qu'il ** ne peut le faire ** . Et, même si le PO écrit les deux en-têtes et vide le flux de réponse, il ne sera pas capable de réaliser ce qu'il désire. –

0

Ceci n'est tout simplement pas possible parce que le comportement défini du navigateur est forcément vague. En d'autres termes, lorsque le navigateur note la présence de deux en-têtes, chacun avec des exigences potentiellement contradictoires, le comportement peut être de simplement ignorer un, au lieu d'obéir aux deux - c'est au vendeur du navigateur de le définir. Dans ce cas particulier, les en-têtes HTTP Content-Disposition et Location sont en conflit, d'autant plus que si le navigateur traitait l'en-tête Location d'abord, la redirection ne serait jamais demandée à l'utilisateur final. Télécharger. Sur une note supplémentaire, l'en-tête Location n'aurait de sens que pour une réponse HTTP 302 (je crois que ce n'est pas le cas dans votre application, pas que cela pourrait aider).

0

Vous pouvez utiliser un peu de JavaScript pour le travail

<a href="myfile.txt" onclick='window.location = 'http://www.google.com/';">
File
</a>

-1

Ceci est une option, pas l'en-tête partie difficile

private void DownloadFile() 

{ 

//Download file here... 

//Refresh this page. 
this.Response.Redirect(Request.Url.AbsolutePath); 

} 
Questions connexes