2013-09-30 3 views
0

J'essaie de télécharger des fichiers qui se trouvent dans un dossier spécifique. Je suis en utilisant ce code, mais il me donne une erreur dans Reponse.End(); -> Impossible d'évaluer l'expression car le code est optimisé ou un cadre natif est sur le dessus de la pile d'appelasp.net - télécharger des fichiers dans un dossier spécifique

if (m.Path.EndsWith(".txt")) 
      { 
       Response.ContentType = "application/txt"; 
      } 
      else if (m.Path.EndsWith(".pdf")) 
      { 
       Response.ContentType = "application/pdf"; 
      } 
      else if (m.Path.EndsWith(".docx")) 
      { 
       Response.ContentType = "application/docx"; 
      } 
      else 
      { 
       Response.ContentType = "image/jpg"; 
      } 
      string nameFile = m.Path; 

      Response.AppendHeader("Content-Disposition", "attachment;filename=" + nameFile); 

      Response.TransmitFile(Server.MapPath(ConfigurationManager.AppSettings["IMAGESPATH"]) + nameFile); 
      Response.End(); 

J'ai aussi essayé Response.Write, mais ça me donne la même erreur.

Répondre

1

Response.End jetteront ThreadAbortException et il est là que pour compatibility with old ASP et vous devez utiliser HttpApplication.CompleteRequest

voici l'exemple:

public class Handler1 : IHttpHandler 
{  
    public void ProcessRequest(HttpContext context) 
    { 
    context.Response.AppendHeader("Content-Disposition", "attachment;filename=pic.jpg"); 
    context.Response.ContentType = "image/jpg"; 
    context.Response.TransmitFile(context.Server.MapPath("/App_Data/pic.jpg")); 
    context.ApplicationInstance.CompleteRequest(); 
    } 

    public bool IsReusable 
    { 
    get 
    { 
     return false; 
    } 
    } 
} 
+0

a maintenant aucune erreur, mais aussi ne rien. ne télécharge pas le fichier. – Jcbo

+0

étrange, j'ai essayé ce code dans le gestionnaire ashx et fonctionne bien, mis à jour ma réponse avec cet exemple. Desservissez-vous cela de gestionnaire? –

+0

cela fonctionne :) merci – Jcbo

Questions connexes