2010-11-16 5 views
0

J'ai problème très similaire à ceci: Allowing users to download files - ASP.NET, mais dans mon cas, je suis génèrent xlsx avec ajax, et à la page ASPX ajax-disant que je me sers:Générer un fichier avec ajax et permettre à l'utilisateur de le télécharger?

Response.Clear(); 
Response.ContentType = "application/octet-stream"; 
string filename = User.Identity.Name + "_Report.xlsx"; 
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); 
Response.WriteFile(AppDomain.CurrentDomain.BaseDirectory + "Reports\\" + filename); 
Response.End(); 

Lorsque ce fichier est généré, le contrôle est retourné à la page d'appel ajax et à partir de là, je ne veux pas montrer le dialogue de fichier de sauvegarde basé sur cette réponse ajax et permettre à l'utilisateur de télécharger ce fichier généré. Je ne veux pas enregistrer le fichier sur le disque avec ajax appelé page, puis rediriger la page d'appel ajax à ce fichier, à cause du bloqueur de popup dans IE. J'utilise jquery pour les appels ajax:

$.ajax({ 
    type:"POST", 
    url: "AjaxReport.aspx",    
    data:dataString, 
    success: function(data) { 
     //don't want to use this 
     // $('#RedirectIFrame').attr('src','Reports/Report.xlsx?cache='+Math.random()); 
     //want to use data variable containing ajax response (bytes of Report file) showing 
     //save dialog to download this file from browser 
    }    
}); 

Comment faire?

Répondre

0

Actuellement, JavaScript ne peut pas accéder au système de fichiers de l'utilisateur, ce qui signifie que vous ne pouvez pas inviter les utilisateurs à enregistrer un fichier provenant d'un flux réseau.

En d'autres termes. Vous devrez effectuer cette redirection et écrire votre flux de fichier dans la réponse HTTP et laisser l'utilisateur décider quoi faire :)

Questions connexes