将PDF传输到浏览器?

有谁能请告诉我如何将pdf流式传输到新的标签浏览器? 我只是在内存上有pdf流,当我点击链接在新标签页或窗口浏览器中显示PDF时我想要。 我怎么能这样做? 谢谢!!!

我有这个链接:

 

在我的代码背后,我在onload事件上有这个:

  Stream pdf= getPdf if (pdf != null) { SetLinkPDF(pdf); } private void SetLinkPDF(IFile pdf) { hrefPdf.href = "MyPDF to the Browser" PdfName.Text = pdf.PdfName; } 

不过,我必须处理流pdf(IFile包含PDF的名称,流,元数据等)

我可以做些什么来处理这个以及当我点击在新浏览器中显示流时?

我还有另一个问题,就是OnClientClick =“aspnetForm.target =’_ blank’;” timbck2建议我。 我必须在新窗口中打开文件(图像或pdf),我该怎么办? 不工作这个。 谢谢!

Timbbck2我的asp代码是:

  

谢谢!!!

我是从磁盘上的文件中完成的 – 从内存流中发送数据应该不会有太大的不同。 除了数据本身之外,您还需要向浏览器提供两个元数据。 首先,您需要提供数据的MIME类型(在您的情况下,它将是application/pdf ),然后是Content-Length标头中的数据大小(以整数forms),然后发送数据本身。

总而言之(考虑到评论以及我认为您的要求,您的标记将如下所示:

 your link text 

你的代码中的这几行C#代码应该可以做到(或多或少):

 protected void lnkButton_Click(object sender, EventArgs e) { Response.ClearContent(); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Disposition", "inline; filename=" + docName); Response.AddHeader("Content-Length", docSize.ToString()); Response.BinaryWrite((byte[])docStream); Response.End(); } 

要直接在浏览器中显示pdf,您应该为application/pdf的响应设置内容类型

您的用户还应安装某种pdf阅读器,以便工作。

你有没有尝试过Response.BinaryWrite ? 您可能也想设置一些标题。

最佳答案建议首先将流转换(转换)为byte [],然后将文件下载到服务器(来自它来自的任何流),然后将其发送到客户端。

如果您需要提供Stream作为某些外部服务的参数(例如我的Azure存储),您可以使用以下方法。

 public ActionResult Coupons(string file) { Response.AddHeader("Content-Disposition", "inline; filename=" + file); Response.ContentType = "application/pdf"; AzureStorage.DownloadFile(file, Response.OutputStream);//second parameters asks for a 'Stream', you can use whatever stream you want here, just put it in the Response.OutputStream return new EmptyResult(); } 

这将直接将文件流式传输到客户端(据我所知)。