2014-12-05 35 views
0

我在我的报表控制器中使用下面的方法。它成功返回我分配给数据库中varBinary(MAX)字段的文件内容。我的问题是,执行此代码时会导致浏览器提示用户保存或打开文件。我想阻止这种事情发生。防止代码提示用户保存文件

如何强制它只将二进制数据返回给调用控制器方法,而不是将结果推送到客户端浏览器?

private FileContentResult RenderReportFile(LocalReport localReport, List<ReportDataSource> listDS, string sFilename, string sReportType, bool bLandscape) 
{ 
    string sHeight = "11"; 
    string sWidth = "8.5"; 

    if (bLandscape) 
    { sWidth = sHeight; sHeight = "8.5"; } 

    foreach (ReportDataSource ds in listDS) 
    { 
     localReport.DataSources.Add(ds); 
    } 

    HttpContextBase imageDirectoryPath = HttpContext; 

    string reportType = sReportType; 
    string mimeType; 
    string encoding; 
    string fileNameExtension; 

    //The DeviceInfo settings should be changed based on the reportType 
    string deviceInfo = 
     "<DeviceInfo>" + 
     " <OutputFormat>" + sReportType + "</OutputFormat>" + 
     " <PageWidth>" + sWidth + "in</PageWidth>" + 
     " <PageHeight>" + sHeight + "in</PageHeight>" + 
     " <MarginTop>0.5in</MarginTop>" + 
     " <MarginLeft>0.5in</MarginLeft>" + 
     " <MarginRight>0.5in</MarginRight>" + 
     " <MarginBottom>0.5in</MarginBottom>" + 
     "</DeviceInfo>"; 

    Warning[] warnings; 
    string[] streams; 
    byte[] renderedBytes; 

    //Render 
    renderedBytes = localReport.Render(
     reportType, 
     deviceInfo, 
     out mimeType, 
     out encoding, 
     out fileNameExtension, 
     out streams, 
     out warnings); 


    //Write to the outputstream 
    //Set content-disposition to "attachment" so that user is prompted to take an action 
    //on the file (open or save) 

    Response.Clear(); 
    Response.ContentType = mimeType; 
    Response.AddHeader("content-disposition", "attachment; filename=" + sFilename + "." + fileNameExtension); 
    Response.BinaryWrite(renderedBytes); 
    Response.End(); 
    return File(renderedBytes, "application/pdf", sFilename + "." + fileNameExtension); 
} 
+0

不使用内容处置。 – 2014-12-05 13:03:31

+1

为什么你不想把它推到客户端?你想用它做什么? – 2014-12-05 13:05:03

+0

你为什么直接操纵'Response'? – 2014-12-05 13:13:24

回答

1

此代码是负责文件发送到客户端:

Response.Clear(); 
Response.ContentType = mimeType; 
Response.AddHeader("content-disposition", "attachment; filename=" + sFilename + "." + fileNameExtension); 
Response.BinaryWrite(renderedBytes); 
Response.End(); 

删除它,用户将不会被提示保存或打开。