ASP.Net MVC:在浏览器中显示文件,在浏览器选项卡中显示文件名

时间:2016-11-14 09:08:11

标签: c# asp.net-mvc file browser display

在我的应用程序中,我有一个文件夹结构,您可以上传各种文件(jpg,png,pdf,txt等)。您可以将它们直接下载为文件,也可以在浏览器中查看该文件。

要在浏览器中显示文件,我使用以下控制器操作:

    public virtual ActionResult FileDisplay(int fileId, bool isFile)
    {
        var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
        return base.File(viewmodel.Data, viewmodel.MediaType);
    }

该文件在浏览器中显示如下: https://i.stack.imgur.com/TXmTy.jpg

浏览器标签显示我的控制器名称“FileDisplay”和(对于此示例)图像的尺寸。

问题: 如何在浏览器选项卡标题中显示文件名而不是控制器名称?这适用于所有文件类型。

1。内容处置标题

我找到了几个帖子,他们说要将Content-Disposition标头添加到带有文件名的响应中:

但这不起作用。

2。将文件名添加到文件构造函数

return base.File(viewmodel.Data, viewmodel.MediaType, viewmodel.FileName);

如果我这样做,则下载文件而不是在浏览器中显示。

第3。 PDF文件标题

我发现有时浏览器标签标题是正确的!如果我在浏览器中显示具有文件标题的PDF文件(标题为pdf属性,而不是文件名),则浏览器标题是正确的: https://i.stack.imgur.com/orAZS.jpg

有人可以帮我这个吗?

4 个答案:

答案 0 :(得分:1)

现在解决方法:

我使用全屏iframe创建了一个新动作和视图,因此我可以设置此容器视图的标题。 IFrame源直接调用我的文件。

    public virtual ActionResult FileDisplay(string fileName, int fileId, bool isFile)
    {
        var viewModel = new IFrameDocumentDisplayViewModel
        {
            FileName = fileName,
            FileId = fileId,
            IsFile = isFile
        };

        return PartialView("IFrameFileDisplayView", viewModel);
    }

    public virtual ActionResult GetFile(int fileId, bool isFile)
    {
        var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
        return base.File(viewmodel.Data, viewmodel.MediaType);
    }

@model OnView.Models.ViewModels.Document.IFrameDocumentDisplayViewModel

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@Model.FileName</title>
</head>
<body>
    <iframe style="border: 0; position:absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%" src="@Html.Raw(Url.Action("GetFile", "Document", new { fileId = Model.FileId, isFile = Model.IsFile}))"></iframe>
</body>
</html>

所以现在我可以设置页面标题。但我仍然很好奇如何在没有IFrame的情况下完成它。

答案 1 :(得分:0)

浏览器显示为标签标题的是URL的最后一部分(浏览器不知道您的控制器名称是什么),因此您可以重新格式化您的网址:

localhost/OnView.Web/Document/FileDisplay/1685/True/MyTabName

然后标签标题为 MyTabName

但为此目的更改整个URL架构似乎也是一种解决方法......

旁注:我有同样的问题,但我的网址是这样的:FileDisplay/3?isFile=true我的标题标题是 3 (在Chrome中。对于IE,标签标题是域名)

答案 2 :(得分:-1)

试试这个: -

public virtual ActionResult FileDisplay(int fileId, bool isFile)
{
    var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
    ViewBag.Title= viewmodel.FileName;
    return base.File(viewmodel.Data, viewmodel.MediaType);
}

答案 3 :(得分:-2)

将标题中的标题标记设置为文件名

  <tatle>Filename</title>