2009-09-28 9 views
3

J'ai un problème pour essayer de télécharger les noms de fichiers avec un point-virgule dans IE8.Point-virgule dans Content-Disposition filename

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

En supposant que attachment.File.FileName = "Test, test, Test.txt"

FF 3.5: Il vous invite à enregistrer/ouvrir le fichier avec le nom « Test, test, test. SMS". C'est le résultat souhaité.

IE8: Il vous invite à enregistrer/ouvrir le fichier avec le nom "Test".

Je dois trouver comment obtenir le résultat souhaité dans IE8.

Répondre

2

Avez-vous effectué un test en utilisant la séquence d'échappement pour; (% 3B)?

Response.AddHeader("Content-Disposition", "attachment; filename=\"file%3Bfile%3B.txt\""); 
+1

qui fonctionne bien pour InternetExplorer mais il est cassé dans les navigateurs qui suit RFCs (par exemple Firefox): pour cent codage est seulement autorisé par RFC2231, mais qui fait aussi nécessaire d'utiliser et l'étoile et deux apex: 'filename * = utf-8'en'name% 20with% 20percent% 20encoding' – lapo

+3

C'est la syntaxe spécifique à IE. Ne pas. –

+0

La question est très claire: "Pour comprendre comment obtenir le résultat souhaité dans IE8". Comme IE n'utilise pas le RFC, vous devez inclure un correctif spécifique pour que cela fonctionne dans ce navigateur. – Rodrigo

-1

Vérifiez la condition pour IE et utilisez URLEncoder.encode. Ça va marcher.

Ex .: if (isIE) { fileName = URLEncoder.encode(fileName, "UTF-8"); }

+0

Non. Éviter les UAs à boîtier spécial. Cela cause beaucoup de dommages à long terme (comme les branches de code non maintenues/non testées). –

+0

Malheureusement, les noms de fichiers Content Disposition ne sont pas gérés de manière cohérente dans les différents navigateurs. Renifler est inévitable si vous voulez gérer des noms de fichiers nonascii. – Antimony

Questions connexes