使用Response.OutputStream.Write将文件发送到浏览器时如何设置页面标题

时间:2012-08-21 13:51:22

标签: asp.net vb.net http-headers content-disposition

我有一个页面用于从数据库中提取文件,并提示下载或流式传输到浏览器,具体取决于URL的格式。这工作正常,但是当我尝试设置页面标题时,我所做的一切都不起作用,它默认为URL中的域名。

我意识到这很有可能发生,因为我使用Response.OutputStream.Write(buffer, 0, bytesRead)向浏览器发送二进制文件,所以根据我在网上找到的其他内容“我用二进制文件填充缓冲区所以我没有控制标题“

  

您正在使用二进制文件填充缓冲区,没有HTML,因此没有标题标记。我不确定此时您是否可以控制浏览器中的Title标签。让我通过PDF查看我现在拥有的页面。它看起来不像这样,至少在我看的例子中。我打开了另一个PDF,但直接是本地文件,它在浏览器中设置了Title标签。我不确定这是否嵌入PDF中。

在此处找到:http://forums.asp.net/t/1088814.aspx/1

我已经尝试了所有正常的地方来设置页面标题:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="FileServer.aspx.vb" Inherits="FileServer" Title="Title goes here" %>

<head runat="server">
    <title>Title goes here</title>
</head>

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim FileNumber As String = RouteData.Values("FileNumber")
        Dim Disposition As String = RouteData.Values("Disposition")

        If FileNumber IsNot Nothing Then
            Title = "Title goes here"
            ServeFile(FileNumber, Disposition)
        End If
End Sub

我有什么方法可以设置这个标题,还是我运气不好?

1 个答案:

答案 0 :(得分:4)

在将文件发送到浏览器的同时,无法设置标题。对于浏览器更改“页面”标题,它需要实际呈现HTML文档(即,它需要呈现页面)。

在这种情况下,您不会发送任何有效的HTML内容,因此会下载您发送的内容。

如果你想这样做,你需要做的就是做一些“反弹”。重定向到呈现标题的页面,以及您想要的任何其他内容(即aspx页面)。从该页面“弹出”浏览器到下载。