【问题标题】:How to set the page title when sending a file to the browser using Response.OutputStream.Write使用 Response.OutputStream.Write 向浏览器发送文件时如何设置页面标题
【发布时间】:2012-08-21 13:51:21
【问题描述】:

我有一个页面,用于从数据库中提取文件并提示下载或流式传输到浏览器,具体取决于 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

我有什么办法可以设置这个标题还是我不​​走运?

【问题讨论】:

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


    【解决方案1】:

    您不能在将文件发送到浏览器的同时设置标题。为了让浏览器更改“页面”标题,它需要实际呈现一个 HTML 文档(即它需要呈现一个页面)。

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

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

    【讨论】:

    • 我曾考虑过这一点,并想知道在进行重定向时是否会保留标题。我还刚刚在其他地方发现有人建议这样做的唯一方法是将文件的内容发送到 iframe 中。没有一个很好的选择,但我想你刚刚证实了我害怕的东西 - 谢谢 :)
    • 它应该保留重定向之前的所有内容,因为它没有其他内容可以在浏览器中呈现。你可以用iframe 做点什么,但我个人认为iframes 是邪恶的,所以我像瘟疫一样避开它们。
    • 看来iframe 可能是我唯一的选择。我尝试了Response.Redirect,它覆盖了我的标题和页面中的所有其他内容。我认为如果我将它作为下载发送它会起作用,但是由于我将文件流式传输到浏览器,它已经覆盖了浏览器中的所有内容。现在决定我是否真的需要足够的标题来使用 iframe...
    • 尝试改用Server.Transfer
    • 我也尝试过,但由于我的 URL 使用的是路由而不是包含 aspx 文件的标准 URL,因此无法使其正常运行。除了路由之外,我不确定问题是什么。我做了一些硬编码,这似乎工作正常并且标题保持不变。因此,要使用这个我认为是最好的选项,我将不得不重写我的主页以使用查询字符串而不是路由。
    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2021-07-16
    • 2015-05-07
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多