Question

Comment puis-je spécifier le nom du fichier lors du vidage des données dans le flux de réponses?

En ce moment, je fais ce qui suit:

byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";            
Response.BinaryWrite(data);
Response.End();

Avec le code ci-dessus, j'obtiens "foo.aspx.pdf". comme nom de fichier à sauvegarder. Je semble me souvenir d’avoir pu ajouter un en-tête à la réponse pour spécifier le nom du fichier à enregistrer.

Était-ce utile?

La solution

Ajoutez une disposition de contenu à l'en-tête:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");

Autres conseils

Pour info ... si vous utilisez " inline " au lieu de " pièce jointe " le fichier s'ouvrira automatiquement dans IE. Au lieu d’inviter l’utilisateur par un dialogue Ouvrir / Enregistrer.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

Pour une raison quelconque, la plupart des réponses ne semblent même pas tenter de coder la valeur du nom de fichier. Si le fichier contient des espaces, des points-virgules ou des guillemets, il risque de ne pas apparaître correctement.

Il semble que vous puissiez utiliser le ContentDisposition classe pour générer une valeur d’en-tête correcte:

Response.AppendHeader("Content-Disposition", new ContentDisposition
{
    FileName = yourFilename
}.ToString());

Vous pouvez consulter le code source de ContentDisposition.ToString () pour confirmer qu'il essaie de l'encoder correctement.

Avertissement : cela semble se bloquer lorsque le nom du fichier contient un tiret (pas un trait d'union). Je n'ai pas encore pris la peine d'examiner cela.

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top