2010-12-06 27 views
1
string filename = "Category#FileName"; 

response.AddHeader("content-disposition", "attachment; filename=" + filename); 
response.ContentType = "text/csv"; 
response.AddHeader("Pragma", "public"); 

Nom du fichier final => Category_FileNameASP.NET Exporter vers Excel, si le nom de fichier contient le caractère # ou /, il est converti en caractère de soulignement (_) tout en affichant la boîte de dialogue d'ouverture/de sauvegarde!

Je vous serais reconnaissant de votre aide ici, pls aider!

Répondre

1

Un nom de fichier ne peut pas contenir le caractère / sous Windows (ou la plupart des autres systèmes d'exploitation), vous ne pourrez donc pas empêcher la conversion de ce fichier. # est laissé seul par la plupart des navigateurs, l'intrus étant IE.

Content-Disposition Les noms de fichiers sont un peu limités. Les caractères non-ASCII ne sont pas fiables et l'échappement correct selon le RFC ne fonctionne pas. Si vous voulez obtenir des caractères Unicode dans un nom de fichier de téléchargement par défaut - ou certains autres caractères de ponctuation incluant # dans IE - vous devez encoder l'URL et l'inclure en tant que partie finale du chemin, en omettant le nom de fichier Content-Disposition. par exemple:

http://www.example.com/myscript.aspx/foo%23bar.xls 

myscript.aspx.

response.AddHeader("Content-Disposition", "attachment"); 

(Vous ne pouvez toujours pas inclure dans / un nom de fichier ainsi que les serveurs Web ont tendance à bloquer toutes les URL avec% 2F Dans tous les cas, comme ci-dessus, vous ne seriez pas en mesure de l'enregistrer avec un / dans le nom de fichier de toute façon.)

+0

Merci Bobince !! UrlEncode fonctionne très bien avec "#". Merci beaucoup! – Lakshminarayanan

+0

Ah, 'UrlEncode' de .NET n'est peut-être pas la bonne chose pour un caractère d'espace, cependant: il va l'encoder à' + 'au lieu de'% 20', ce qui n'est pas tout à fait correct pour les composants path. [Arrière-plan ici] (http://stackoverflow.com/q/2678551/18936). C'est un peu dommage qu'il n'y ait pas de méthode d'encodage d'URL non formel dans .NET, mais vous pouvez le corriger manuellement en remplaçant '+' par '% 20' après l'encodage. – bobince

+0

Oui Bobince, j'ai aussi connu le même problème de "+" pour l'espace. Puis est allé avec le remplacement manuel. Pensé de répondre à votre suggestion précédente, mais a reçu les commentaires de votre part :) Merci encore – Lakshminarayanan

0

Malheureusement, il s'agit d'une limitation de IE.

Selon Microsoft, les caractères suivants seront convertis en underscores si vous les utilisez dans l'attribut de fichier joint de nom de fichier:

< Left angle bracket 
> Right angle bracket 
\ Backslash 
" Quotation mark 
/ Slash mark 
: Colon 
| Vertical bar 
? Question mark 
* Asterisk 
    Space 

Voir https://support.microsoft.com/en-us/help/949197/certain-characters-in-a-file-name-may-be-converted-to-underscores-when-a-user-downloads-a-file-by-using-windows-internet-explorer-7