在浏览器中打开文件而不是下载它

Posted

技术标签:

【中文标题】在浏览器中打开文件而不是下载它【英文标题】:opening a file in the browser instead of downloading it 【发布时间】:2010-08-18 15:49:15 【问题描述】:

我通过报告服务器使用 s-s-rs 使用 ReportExecutionService.Render() 生成一个 resultStream 字节数组,我目前正在使用以下代码为用户提供服务。 有没有办法可以使用这个相同的字节数组在新的浏览器窗口中自动打开报告,而不是转到保存/打开对话框?

   public void RenderReport (byte[] reportDigits, ReportItem reportItem)
   
      HttpResponse response = HttpContext.Current.Response;
      response.Clear();
      response.ContentType = reportItem.ReportMimeType;
      response.AddHeader("Content-Disposition", string.Format("attachment; filename=0", reportItem.ExportName));
      response.OutputStream.Write(reportDigits, 0, reportDigits.Length);
      response.End();
   

过去我使用过一个单独的 ReportViewer.aspx 页面,我会先打开该页面然后显示报告,但如果可能的话,我希望在代码中完成所有操作。

谢谢

【问题讨论】:

【参考方案1】:

就是这一行:

response.AddHeader("Content-Disposition", string.Format("attachment; filename=0", reportItem.ExportName));

这导致它被下载。注释掉那行,只要浏览器能处理 mime 类型,就会在浏览器窗口中渲染。

【讨论】:

我不想接管任何试图发布报告的页面 javascript - window.open('url_to_your_report.ext'); - 你不能用服务器端代码打开一个新窗口 所以保存文件并将重定向脚本注册到它?这不好玩。 哦,对了,这意味着没有真正的方法可以保留文件名并强制在浏览器中打开。我在 url 中有一些带有 id 但没有扩展名的图像。如果这个人想另存为,它使用 id 作为文件名......如果我设置文件名,它会尝试直接保存......当你只想查看图像是否正确调整大小时,这只是一个痛苦...... .【参考方案2】:

只需将要添加的标题更改为附件以外的内容。让它成为你的数据格式——希望浏览器能够识别它。

【讨论】:

以上是关于在浏览器中打开文件而不是下载它的主要内容,如果未能解决你的问题,请参考以下文章

如何直接在浏览器中打开文件,而无需使用文件名在React中下载

Flutter Web:从 URL 下载文件而不打开它

强制本地 html 文件中的超链接打开关联的应用程序而不是下载

强制浏览器下载 PDF 文档而不是打开它

打开存档而不是下载它

在浏览器中打开 PDF 而不是下载它