2010-11-16 63 views
0

我有非常类似的问题,因为这:Allowing users to download files - ASP.NET,但对我来说,我产生与阿贾克斯XLSX文件和Ajax所谓的aspx页面上我使用:使用ajax生成文件并允许用户下载它?

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(); 

当产生这个文件,则控制返回到Ajax调用页面,从那里我不会显示基于这个Ajax响应的保存文件对话框,并允许用户下载这个生成的文件。由于IE中的弹出式窗口拦截器,我不想用称为页面的ajax将文件保存在磁盘上,然后将ajax调用页面重定向到该文件。我正在使用jQuery的阿贾克斯调用:

$.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 
    }    
}); 

如何做到这一点?

回答

0

当前JavaScript无法访问用户的文件系统,这意味着您不能提示用户保存来自网络流的文件。

换句话说。你需要做的是重定向并将你的文件流写入HTTP响应,并让用户决定做什么:)

相关问题