二进制使用ASP.NET写入新的选项卡/窗口

时间:2014-07-02 16:03:07

标签: asp.net vb.net visual-studio-2012 response contenttype

我正在使用VB.NET将pdf文件直接写入浏览器,立即打开它替换当前窗口中的内容。我想要做的是设置一个参数,它将在新的选项卡/窗口中引起二进制写入。

' Set the appropriate ContentType.
Response.ContentType = "Application/pdf"

' Write file directly to browser.
Response.BinaryWrite(binaryData)
Response.End()

必须要设置一些能够在新窗口中编写二进制PDF的东西。像Response.Target =“_ blank”?????

3 个答案:

答案 0 :(得分:6)

首先,创建一个名为“PDF.aspx”的附加页面或任何您想要的页面。

其次,在您的页面中,将“binarydata”变量存储在会话中。

Session("binaryData") = binarydata

告诉它转到你的新页面。

Response.Redirect("PDF.aspx")

第三,转到页面后面的PDF.aspx代码并输入以下内容:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles       Me.Load
    Try
         Response.ContentType = "Application/pdf"
         Response.BinaryWrite(Session("binaryData"))
         Response.End()
    Catch ex As Exception
        Throw ex
    End Try
End Sub

这应该产生你想要的结果。 :)

答案 1 :(得分:1)

替代方案怎么样?向浏览器写入一些客户端脚本以打开新窗口/选项卡。

ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "window.open('MyPDFDisplayer.ashx');");

然后创建一个新的generic handler MyPDFDisplayer.ashx,将PDF写入窗口。

context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(binaryData);
context.Response.End();

我是C#家伙,所以你必须翻译,但这应该很容易。

答案 2 :(得分:0)

我知道这已经过时了但是我已经做了什么来实现OP。 (原谅我,因为这是C#,但它不应该太难转换)

这是我使用的原始代码,显示了与您描述的相同的行为!

Response.ClearContent();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "inline; filename=" + docName);
Response.AddHeader("Content-Length", byteArray.Length.ToString());
Response.BinaryWrite(byteArray);
Response.End();

我必须进行两项关键更改才能使其按照我想要的方式工作(将文件下载为PDF,然后在用户点击该附件时在新标签页中打开。)并且它们都在上面代码的第3行。

更改此

Response.AddHeader("Content-Disposition", "inline; filename=" + docName);

到此

Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");

如果您将Content-Disposition指定为" Inline" ,它将在您当前窗口中输出文件内容。

您需要将此处置方式更改为" attachment" 并确保您的扩展名后缀明确设置为.pdf。